【问题标题】:Drawing Unicode text above U+FFFF with xlib?使用 xlib 在 U+FFFF 上方绘制 Unicode 文本?
【发布时间】:2015-04-15 20:07:13
【问题描述】:

我想使用原始 Xlib 绘制 Unicode 文本。

我发现的仅有的两个文本绘制函数是XDrawText(),它接受可能是ASCII 的未指定编码的文本,以及XDrawText16(),它接受可能是UCS-2 的未指定编码的文本。这两个功能都让我感到悲伤。另外,他们不会让我使用任何高于 U+FFFF 的有用代码点。

有没有办法使用纯 Xlib 绘制非 BMP Unicode 文本?

(我对第三方字体渲染库不感兴趣。)

【问题讨论】:

    标签: unicode xlib


    【解决方案1】:

    使用XDrawString 系列(http://www.x.org/wiki/guide/fonts/)怎么样?具体来说,使用Xutf8DrawString()

    【讨论】:

    • 非常感谢。我认为这些函数在我的 Xlib 参考之后。我确实四处寻找实现,以确保它不只是将字符串解析为 UCS-2,但找不到任何东西 --- 我只需要尝试看看。
    • 事实上,我发现 Xft 扩展使这变得轻而易举,而且我也得到了抗锯齿。这里有一个简单的示例程序:forums.nekochan.net/viewtopic.php?t=8794 我相信它在后台使用客户端 Freetype,但它足够简单,这不是问题。
    【解决方案2】:

    为了完整起见,您还可以使用XChar2b,它可以让您显示最多U+FFFF 的任何字符(16 位编码字符,也就是说UTF-8 最多3 个字节,涵盖所有字符除外数学公式和表情符号 - 包括大部分中文、日文和韩文字形,如Wikipedia)。

    然后您将需要一个utf8toXChar2b 翻译函数,例如Alan 所描述的函数。这个解决方案依赖于Xutil.h,我相信它是 Xlib 的标准部分(在 Arch linux 中分发)——而 Xft 依赖于glib-2.0

    我提到这种可能性是因为您的问题没有明确指出U+FFFF 以上的字符。确实,XChar2b 并没有走那么远。

    【讨论】:

    • 有人可以向我解释为什么这个答案被否决了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 2018-02-20
    相关资源
    最近更新 更多