XTerm 无法正确显示*某些* unicode 字符?

XTerm 无法正确显示*某些* unicode 字符?

我对 XTerm 和 Unicode 没有一般性问题。在大多数情况下,一切都在发挥作用。这很好用:

$ echo "¿dónde está la llama?"
¿dónde está la llama?

就像这样:

$ echo -e "\xE2\x98\xA0"

失败:

$ echo -e "\xE2\xA4\xB7"

而不是预期的输出(⤷,又名箭头指向下方然后向右弯曲)我得到了那个可怕的盒子。我目前正在使用:

xterm*faceName: Hack Regular:size=12:antialias=true

这与我使用的字体相同gnome-terminal,可以正确显示相同的字符。我还尝试过对各种其他等宽字体(Droid Sans Mono、DejaVu Sans Mono、Liberation Mono)进行同样的操作,这些字体在 XTerm 中都有相同的行为(但在其他地方工作得很好)。事实上,查看\u2620正确显示的 和\u2937不正确显示的 之间的字符,有许多字符在 XTerm 中似乎无法正确显示:

$ python
>>> for x in range(0x2620, 0x2938):
...    print(unichr(x))

我想了解这里发生了什么事。为什么 XTerm 显示有问题一些这些角色,而不是其他角色?

答案1

简短:xterm 使用单身的字体(除了双角字符的特殊情况),而其他终端使用附加字体(并且它们使用那些在您请求的字体中找不到的字符的字体)。

long:您感兴趣的角色是不是字体的一部分,看起来像字体 hack-tty在 Debian 中。缺少的代码是 0x2937,您可以看到使用的xfd -fa hack不是由字体提供的(提示:页面上的第一个是 0x2987):

在此输入图像描述

字体的简短描述给出了其预期用途:

没有多余的装饰。没有噱头。 Hack 经过手工修饰和光学平衡,成为代码的主力面孔。

其中(因为“代码”通常是 POSIX 字符集,加上人们认为好的评论)可能很小。此示例比平常有更多的非 POSIX 字符。从 ASCII+Latin1 开始:

在此输入图像描述

字体中有几百个字形(需要另外十几个屏幕截图来显示这些字形,尽管超过一半显示了少量字形)。例如,部分支持第二页:

在此输入图像描述

在评论的提示下,我跟踪 gnome-terminal 发现它加载了这些字体文件:

/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf
/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMoBd.ttf
/usr/share/fonts/truetype/ttf-bitstream-vera/VeraSeBd.ttf
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono.ttf
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif.ttf

0x2937 是由最后一个提供的。实际详细信息可能会因您的配置而异。

相关内容