en_US 语言环境应如何处理可打印字符

en_US 语言环境应如何处理可打印字符

我有两个 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

现在我想我必须去弄清楚如何做错误报告......

相关内容