【发布时间】:2019-08-09 10:31:02
【问题描述】:
我正在使用 Linux 终端
echo -n "ΒΓΔΕΖΗΘΙΚΛΜΝΞΠΡΣΤΥΦΧΨΩ" | iconv -f utf-8 -t ASCII//IGNORE//TRANSLIT
但错误:非法序列。
预期结果:诸如 Α=A、Γ=G、Δ=D、Ε=E、Λ=L 等。
PS:similar to PHP's problem here 但终端不接受 utf8。
【问题讨论】:
标签: iconv
我正在使用 Linux 终端
echo -n "ΒΓΔΕΖΗΘΙΚΛΜΝΞΠΡΣΤΥΦΧΨΩ" | iconv -f utf-8 -t ASCII//IGNORE//TRANSLIT
但错误:非法序列。
预期结果:诸如 Α=A、Γ=G、Δ=D、Ε=E、Λ=L 等。
PS:similar to PHP's problem here 但终端不接受 utf8。
【问题讨论】:
标签: iconv
首先应该是echo -n "ΒΓΔΕΖΗΘΙΚΛΜΝΞΠΡΣΤΥΦΧΨΩ"|iconv -f UTF-8 -t ASCII//TRANSLIT。注意大写的 UTF-8,没有 IGNORE。
其次,直到最近,glibc 中还缺少一个希腊音译表。 (iconv 是 glibc 的一部分)[1]
如果该错误仍然影响您,应该有 ???????????????作为输出给出,但没有错误。
无论如何它已针对 2020-02-01 [2] 发布的 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
注意事项
glibc instead libc
ldd --version 或 dpkg -l libc6 检查版本
【讨论】:
echo -n "ΒΓΔΕΖΗΘΙΚΛΜΝΞΠΡΣΤΥΦΧΨΩ"|iconv -f UTF-8 -t ASCII//TRANSLIT 会导致 "iconv: 位置 0 处的非法输入序列"
/usr/bin/iconv -f UTF-8 -t ASCII//TRANSLIT <<< "ΒΓΔΕΖΗΘΙΚΛΜΝΞΠΡΣΤΥΦΧΨΩ" 并检查libc 版本find /lib -iname 'libc*.so'
/usr/bin/iconv 命令产生了同样的错误。 find 没有结果。 /lib 中唯一的 libc 是 /lib/libc-client.so.2007e
ldd --version = "ldd (Ubuntu GLIBC 2.27-3ubuntu1.2) 2.27"。对于另一种方法(通过 gcc 编译),请参阅 this "linux check glibc" article... 但理想的情况是 inconv 自己说...如果它不说另一个错误。