使用 ASCII//IGNORE//TRANSLIT 将 UTF-8 希腊字母转换为 ASCII

Converting a UTF-8 greek letters to ASCII using ASCII//IGNORE//TRANSLIT

我正在使用 Linux 终端

echo -n "ΒΓΔΕΖΗΘΙΚΛΜΝΞΠΡΣΤΥΦΧΨΩ" | iconv -f utf-8 -t ASCII//IGNORE//TRANSLIT

但错误:非法序列。

预期结果:α=A,Γ=G,Δ=D,ε=E,Λ=L,等等

PS: similar to PHP's problem here 但终端不接受 utf8。

首先应该是echo -n "ΒΓΔΕΖΗΘΙΚΛΜΝΞΠΡΣΤΥΦΧΨΩ"|iconv -f UTF-8 -t ASCII//TRANSLIT。注意大写的 UTF-8 而不是 IGNORE。

其次,glibc 中直到最近才缺少希腊音译 table。 (iconv 是 glibc 的一部分)[1]

如果那个错误仍然影响你应该有 ??????????????作为输出给出,但没有错误。

无论如何,它已为 2020-02-01 发布的 glibc 2.31 修复 [2]

如果在新的 glibc 进入您的发行版之前您确实需要它,您可以修补 glibc/locale/C-translit。h.in 并重新编译。

[1] https://sourceware.org/bugzilla/show_bug.cgi?id=12031

[2] https://sourceware.org/legacy-ml/libc-announce/2020/msg00001.html


注意事项

  • UBUNTU 和许多其他 Linux 使用
  • 在 UBUNTU 你可以用命令 ldd --versiondpkg -l libc6
  • 检查版本