tty1 中无法读取的菱形字符

tty1 中无法读取的菱形字符

我的 Debian Jessie 出了点问题。通常我使用带有 GUI 的 tty7,这里一切都很好。但在 tty1 中,波兰语字符(都是从 UTF-8 文件中键入和读取的)由垂直菱形或菱形表示。与此类似,只有全白色(黑色背景)。

我猜我的所在地看起来不错。

LANG=en_GB.UTF-8
LANGUAGE=en_GB:en
LC_CTYPE="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_PAPER="en_GB.UTF-8"
LC_NAME="en_GB.UTF-8"
LC_ADDRESS="en_GB.UTF-8"
LC_TELEPHONE="en_GB.UTF-8"
LC_MEASUREMENT="en_GB.UTF-8"
LC_IDENTIFICATION="en_GB.UTF-8"
LC_ALL=

它们在 tty7 上的 GUI 中是相同的,这里一切都很好。据我所知和经验,tty1 应该可以工作。但事实并非如此。有小费吗?

答案1

图形用户界面开启tty7使用 X 字体,同时tty1使用 Linux 控制台字体(限制为 512 种不同的字形)。 Linux 控制台显示那些菱形(取决于字体),其中 Unicode替换字符会显示,因为它尝试显示的代码不是合法的 UTF-8。

您会得到 ISO-8859-1 等的这种行为。您可能还记得 ISO-8859-1 代码0xa00xff映射到 Unicode0x00a00x00ff。但在 UTF-8 中,字节看起来不同。

“键入”文件(可能使用cat)不受区域设置的影响。这编码的数据和模式终端的(UTF-8与否)决定字符是否正常打印。

一个有趣的(错误的)特征rxvt-unicode是它注意到非 UTF-8 数据,并假设它是 ISO-8859-1 并(默默地)将其转换为 Unicode。波兰语为 ISO-8859-2,看起来基本相同

如果您碰巧使用 rxvt-unicode 并检查非 UTF8 波兰语文本,那就可以解释问题中的所有症状。

file实用程序可以合理猜测文本是否为 UTF-8。

在澄清之后,这里有一些屏幕截图来展示您的内容从 Linux 控制台中的默认字体获取。这使用了恩诅咒测试程序,显示更多/更少的代码 0-255:

首先,UTF-8模式下的Latin-1字符:

UTF-8 的 Latin-1 覆盖

然后是 Latin-1 字符没有UTF-8 模式:

没有 UTF-8 的 Latin-1 覆盖

并使用UTF-8模式,但运行luit使用 ISO8859-2 编码,并使用相同的测试程序pl_PL(有点迂回,但你可以比较):

使用 <code>luit</code> 覆盖 Latin-2

并将其与xterm

使用 <code>xterm</code> 覆盖 Latin-2

总之,您可能会注意到一些含片拉丁语1在 Linux 控制台中使用 UTF-8 模式的有限字体的字符集。但波兰语(一种不同的字符集)似乎已得到很好的覆盖。

相关内容