5

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

Emacs 有这样的内置功能吗?我知道我可以获取字符的名称和类似名称 ( get-char-code-property),但我不知道内置转录表。

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

我目前的策略是手动构建一个翻译表,但这种方法相当有限,需要大量维护。

4

1 回答 1

3

我知道没有内置功能。unidecode我专门为您的任务编写了一个包。它使用与Python 的同名库中相同的方法。要安装,只需将 MELPA 存储库添加到您的存储库列表:

(add-to-list 'package-archives
  '("melpa" . "http://melpa.milkbox.net/packages/") t)

然后运行M-x package-install RET unidecodeunidecode有 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"
于 2014-03-18T04:03:50.890 回答