我跑了母狗X在三个不同的 Linux 操作系统上,因为我在其中两个(Linux OpenSUSE 11.4 和 BackTrack 5 R1)上使用 yakuake/konsole (OpenSUSE) 和 terminator/tilda (BT 5 R1) 得到了这个奇怪的 �(问号)。
然而,在带有 RoxTerm 的 PuppyLinux Lucid 528 上,该字符按其应有的方式显示(它是希腊字符“fi”)。现在,在 SUSE 和 BT 上,我都检查了 $LC_CTYPE 的值,它与 Puppy Linux 中的相同(即 en_US,因此没有 utf-8 编码)。
我已经在 SUSE 和 BT 上尝试了不同的字符编码(来自终端的设置),我注意到了这些变化,但文本有时仍然是乱码,而不是问号,我得到了一些奇怪的难以理解的“u”-s(在 Puppy 中它始终显示正确)。
是什么导致了这个恼人的问题?
可能有什么不同以及如何检查差异?
答案1
这里发生了几件事。
你能先确定这LC_CTYPE=en_US
确实意味着“没有 utf-8”吗?
该nl_langinfo
函数可以提供帮助,例如:
$ python
>>> import locale
>>> locale.setlocale(locale.LC_CTYPE, 'en_US')
'en_US'
>>> locale.nl_langinfo(locale.CODESET)
'ISO-8859-1'
其次,尝试一次只更改一个变量会很有帮助。例如,如果 RoxTerm 在 PuppyLinux 中工作,那么它在 OpenSUSE 和/或 BackTrack 中也工作吗?您还能说一下BitchX
您正在使用哪个版本,以防有所不同吗?
最后,IRC 并不真正提供任何字符编码信息,因此服务器和频道中的所有用户必须就字符编码达成一致。我认为现在大多数用户都使用 UTF-8,所以也许您应该尝试将设置更改为 UTF-8?
更新
你说BitchX不支持UTF-8。
那么我认为你在与其他用户交谈时会遇到问题。
但如果其他人都说希腊语,并且也使用 BitchX,那么也许您想使用希腊语 ISO-8859-7 字符集。
在我的系统上,唯一支持 ISO-8859-7 的两个语言环境是希腊语语言环境,例如el_GR.iso88597
.
运行locale -a
以查看选项的完整列表,然后选择包含该字符集的选项。
答案2
菱形中的问号可能意味着您的客户端程序接受字符并将其传递给显示引擎(我是否正确,bitchX只是终端程序?),但终端无法呈现它。因此,这可能是终端配置问题 - 例如,所选字体不包含希腊字符的字形。您可以通过从该终端复制并粘贴到另一个运行“hexdump -C”之类的终端来测试它 - 它会显示 phi 代码点(U+03C6,因此 utf-8 的 hexdump 中的“CF 86”)。如果是这样,请尝试选择支持希腊语的字体。
看到类似 \u03C6、 等的内容意味着可能的语言环境已损坏(不是 Unicode),因此客户端接受字符,对它们应用 Unicode 处理,但随后无法直接输出它们并切换到回退模式。因此,我猜 SuSE 和 BT 设置都将 en_US 作为非 Unicode 编码的别名,可能是 ISO-8859-1。尝试直接设置en_US.UTF-8并比较效果。