我对 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 是由最后一个提供的。实际详细信息可能会因您的配置而异。