我有两个 ubuntu trusty 系统。一个是新安装的,另一个稍旧一些。
在这些系统上,我对语言环境有一些麻烦en_US
,它的行为有所不同,最容易用以下命令看到:
printf '\xe5\xe4\xf6' | LANG=en_US LC_ALL=en_US hexdump -vC
在较旧的版本中,我获得了预期的输出:
00000000 e5 e4 f6 |åäö|
00000003
但是在新安装的版本上,我得到的是点而不是åäö:
00000000 e5 e4 f6 |...|
00000003
我也在 CentOS 6 系统上检查过,那里也得到了我期望的输出(第一个)。但是,如果我locale-gen --purge
在旧系统上运行,它会更改为较新的(IMO 不正确的)输出。
是否有人知道我可以做些什么来让新系统生成我期望的输出,或者这个区域是否发生了一些变化,导致同意的字符不再可打印,或者是否还有其他东西可能影响它?
localedef --list 具有相同的输出:
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US
en_US.iso88591
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
es_US
es_US.iso88591
es_US.utf8
答案1
我找到了一种使用 en_US 语言环境打印这些字符的方法:
按Alt+F2并运行env LANG=en_US gnome-terminal
。然后在终端窗口中:
$ printf '\xe5\xe4\xf6\n'
åäö
$
这至少表明语言环境没有问题,但它按预期启用了 ISO-8859-1 编码。
编辑:
使用 hexdump 打印也可以正常工作:
$ printf '\xe5\xe4\xf6' | hexdump -vC
00000000 e5 e4 f6 |åäö|
00000003
$
答案2
我设法让它恢复工作。首先,删除所有语言环境(我实际上使用的是 docker 镜像,因此该部分刚刚开始),然后
echo "en_US ISO-8859-1" >> /var/lib/locales/supported.d/local
dpkg-reconfigure locales
这将生成可用的语言环境文件。之后,我可以添加 UTF-8 文件而不会破坏它。
echo "en_US UTF-8" >> /var/lib/locales/supported.d/local
dpkg-reconfigure locales
现在我想我必须去弄清楚如何做错误报告......