libvte unicode 字体处理

libvte unicode 字体处理

我正在尝试显示一些 ANSI 文本,其中包含来自Unicode 专用区域。我有两种包含这些字符的字体。第一个是 PCF(位图)字体,第二个是 TTF 字体,由第一个字体生成并包含完全相同的一组字形。

PCF 字体在 Debian 和 Ubuntu 中的“tv-fonts”包中可用,称为“图文电视”。 TTF 版本可用这里

我通过将终端配置为使用我的一种字体来显示此文本文件,然后进行 cat'ing这个文件

这会在不同的终端产生不同的结果:

Xterm 只能使用 PCF 字体。我xterm -fg white -bg black -fn teletext看到了正确的输出:

xterm pcf

Terminator 可以使用 PCF 和 TTF 字体。使用 PCF 字体,输出是正确的:

终结者PCF

但是,如果我告诉终结者使用 TTF 字体,则输出在大“BBC”徽标后包含意外字符:

终结者.ttf

有问题的字符是,unicode 0xee20。在 PCF 和 TTF 字体中,它都是一个空白区域。

使用 xfce4-terminal 时,结果是相同的。 Terminator 和 Xfce4-terminal 都使用 libvte。

所以我的问题是:

  • 为什么 libvte 显示错误的字形?
  • 为什么 TTF 和 PCF 的表现不同? (请记住,两种字体都包含一组相同的字形。)

更新:看来这实际上与 VTE 无关,而是与 Gtk 相关,也可能与 X11 本身相关。在文本编辑器(例如鼠标垫(使用 GtkSourceView))中设置字体时,可以看到相同的结果。

答案1

实际上,xterm( 和xfd) 可以使用 TrueType 字体,使用该-fa选项。对于后者,您可以看到0xee20字体中缺少该内容:

在此输入图像描述

鉴于此,xterm 将显示缺失的字形(因为它仅使用一种字体)。 vte 可能也在做同样的事情,因为它可能使用的后备字体都没有这个特殊的私人使用代码。

xfd为了进行比较,下面是显示 PCF 字体(确实有字形)的屏幕截图:

在此输入图像描述

字体是否“相同”取决于它们的创建(和维护)方式。我在 TrueType 字体的屏幕截图上看到 7 个缺失的字形,而在 PCF 字体上则没有。

相关内容