![libvte unicode 字体处理](https://linux22.com/image/83161/libvte%20unicode%20%E5%AD%97%E4%BD%93%E5%A4%84%E7%90%86.png)
我正在尝试显示一些 ANSI 文本,其中包含来自Unicode 专用区域。我有两种包含这些字符的字体。第一个是 PCF(位图)字体,第二个是 TTF 字体,由第一个字体生成并包含完全相同的一组字形。
PCF 字体在 Debian 和 Ubuntu 中的“tv-fonts”包中可用,称为“图文电视”。 TTF 版本可用这里。
我通过将终端配置为使用我的一种字体来显示此文本文件,然后进行 cat'ing这个文件。
这会在不同的终端产生不同的结果:
Xterm 只能使用 PCF 字体。我xterm -fg white -bg black -fn teletext
看到了正确的输出:
Terminator 可以使用 PCF 和 TTF 字体。使用 PCF 字体,输出是正确的:
但是,如果我告诉终结者使用 TTF 字体,则输出在大“BBC”徽标后包含意外字符:
有问题的字符是,unicode 0xee20。在 PCF 和 TTF 字体中,它都是一个空白区域。
使用 xfce4-terminal 时,结果是相同的。 Terminator 和 Xfce4-terminal 都使用 libvte。
所以我的问题是:
- 为什么 libvte 显示错误的字形?
- 为什么 TTF 和 PCF 的表现不同? (请记住,两种字体都包含一组相同的字形。)
更新:看来这实际上与 VTE 无关,而是与 Gtk 相关,也可能与 X11 本身相关。在文本编辑器(例如鼠标垫(使用 GtkSourceView))中设置字体时,可以看到相同的结果。