我正在尝试在 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) 字形正在工作。
我认为这可能是一个类似于这篇文章的区域设置问题:ubuntu 18.04 中 xterm 无法显示 8 位字符。
我尝试过LANG=en_US.UTF-8
但LANG=en_US
没有成功。
编辑:当LANG=en_US.UTF-8
设置 Unicode 补充多语言平面(平面 1)时,xterm 中的字形将显示为“奇怪的方块”。当我使用 en-US 语言环境启动 xterm 时,LC_ALL=en_US LANG=en-US xterm
平面 1 字形未显示和/或编码错误。
我应该使用不同的区域设置吗?如果有,是哪一个以及如何?此外,将“unifont_upper”定义为后备而不是合并它会更好吗?
答案1
位图字体使用 X 库接口XDrawString16
(看源代码),顾名思义,仅限于 16 位字体索引。
可能XmbDrawString
可能会超出此限制(但由于简陋的联机帮助页没有提供任何线索,因此只能通过研究源代码来确定)。正如您可能看到的那样,这不是一个简单的替换这次讨论。
如果你想过去骨形态发生蛋白,您必须使用 TrueType 字体。
答案2
由于您在范围超过 xFFFF 时遇到问题,我猜您用echo -e "\u1234"
?打印这个转义码有一个简单的技巧:
- \u1234 - 打印 0000-ffff 范围内的 unicode 符号
- \U12345678 - 打印 00000000-ffffffff 范围内的 unicode 符号