Emacs lisp:将字符转换为标准ASCII转录

时间:2013-06-19 16:02:57

标签: emacs unicode character elisp translation

我正在尝试编写一个函数,它将包含unicode字符的字符串转换为某些默认的ASCII转录。理想情况下,我想要,例如Ångström成为Angstroem,如果不可能,则Angstromα=χ。同样,a=x应该变为get-char-code-property(c?)或类似。

Emacs是否具有内置功能?我知道我可以得到字符的名称和相似之处({{1}}),但我不知道内置的转录表。

目的是将条目标题翻译成有意义的可读文件名,避免出现无法理解unicode的软件问题。

我目前的策略是手工制作翻译表,但这种方法相当有限,需要大量维护。

1 个答案:

答案 0 :(得分:1)

我知道没有内置功能。我专门为你的任务写了一个包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"