xterm 中的 Unicode 补充多语言平面(平面 1)字形

xterm 中的 Unicode 补充多语言平面(平面 1)字形

我正在尝试在 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-8LANG=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 符号

相关内容