我正在尝试编写一个函数,将包含 unicode 字符的字符串转换为一些默认的 ASCII 转录。理想情况下,我希望例如Ångström
变为 Angstroem
,或者,如果不可能,则变为 Angstrom
。同样 α=χ
应该变成 a=x
(c?) 或类似的。
Emacs 有这样的内置功能吗?我知道我可以得到字符的名称和相似之处( get-char-code-property
),但我不知道内置的转录表。
目的是将条目的标题转换为有意义的可读文件名,避免无法理解 unicode 的软件出现问题。
我目前的策略是手工构建一个转换表,但这种方法相当有限,需要大量维护。
最佳答案
没有我所知道的内置功能。我专门为您的任务编写了一个包 unidecode
。它使用与 Python's same-named 库中相同的方法。要安装,只需将 MELPA 存储库添加到您的存储库列表:
(add-to-list 'package-archives
'("melpa" . "http://melpa.milkbox.net/packages/") t)
然后运行 M-x package-install RET unidecode。
unidecode
有 2 个函数,unidecode-unidecode
将 Unicode 转换为 ASCII,unidecode-sanitize
丢弃非字母数字字符并将空格转换为连字符。ELISP> (unidecode-unidecode "¡Hola!, Grüß Gott, Hyvää päivää, Tere õhtust, Bonġu Cześć!, Dobrý den, Здравствуйте!, Γειά σας, გამარჯობა")
"!Hola!, Gruss Gott, Hyvaa paivaa, Tere ohtust, Bongu Czesc!, Dobry den, Zdravstvuite!, Geia sas, lmsllmlllmckhmslmgll"
ELISP> (unidecode-sanitize "¡Hola!, Grüß Gott, Hyvää päivää, Tere õhtust, Bonġu Cześć!, Dobrý den, Здравствуйте!, Γειά σας, გამარჯობა")
"hola-gruss-gott-hyvaa-paivaa-tere-ohtust-bongu-czesc-dobry-den-zdravstvuite-geia-sas-lmsllmlllmckhmslmgll"
关于Emacs lisp : Translate characters to standard ASCII transcription,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17195972/