我正在尝试在 xterm 中显示 Unicode 补充多语言平面(平面 1)字形。这些字形在 U+010000..U+01FFFF 范围内(https://unifoundry.com/pub/unifont/unifont-15.0.01/unifont_plane1-15.0.01.bmp)。
该字体是 unifont-15.0.01.hex 和 unifont_upper-15.0.01.hex 的合并版本,转换为 bdf 并通过我的 .Xresources 文件加载:
*locale: true
*ut8: true
xterm*font: -*-merged-*-*-*-16-*
平面 0 (U+0000..U+FFFF) 字形正在工作。
我认为这可能是类似于这篇文章的语言环境问题:Cannot display 8-bit characters in xterm in ubuntu 18.04。
我尝试过LANG=en_US.UTF-8
但LANG=en_US
没有成功。
编辑:当LANG=en_US.UTF-8
设置 Unicode Supplementary Multilingual Plane (Plane 1) 时,xterm 中的字形显示为“奇怪的方块”。当我使用 en-US 语言环境启动 xterm 时,LC_ALL=en_US LANG=en-US xterm
Plane 1 字形未显示和/或编码错误。
我应该使用不同的语言环境吗?如果有,是哪一个以及如何?此外,将“unifont_upper”定义为后备而不是合并它会更好吗?
位图字体使用 X 库接口
XDrawString16
(参见源代码),顾名思义,它仅限于 16 位字体索引。可能
XmbDrawString
会超过此限制(但由于简陋的联机帮助页未提供任何线索,因此只能通过研究源代码来确定)。这不是一个简单的替换,正如您可能从本次讨论中看到的那样。如果你想超越BMP,你必须使用 TrueType 字体。
由于您遇到的范围超过 xFFFF 的问题,我猜您使用
echo -e "\u1234"
? 这个转义码有一个简单的技巧: