我试图使用XmLabel和服务器端的XLFD字体(-monotype-arial-medium-r-normal--*-90-*-*-p-*-iso10646-1)显示一些Unicode(实际上是西里尔文)。当我使用XmStringCreate()XmStringCreateLtoR()作为XmString工厂时,结果符合我的期望。
但是,当我尝试使用XmStringGenerate()factory时,对于多字节Unicode字符串传入XmMULTIBYTE_TEXT或对于宽字符串传入XmWIDECHAR_TEXT时,无论使用何种字体,垃圾都会呈现在屏幕上(我尝试了UTF-8和单字节西里尔服务器端字体)。
结果如下所示(前2行正常,第2到第6行用XmStringGenerate()创建标签,明显不正常):
c - XmMULTIBYTE_TEXT或XmWIDECHAR_TEXT模式下的XmStringGenerate()-LMLPHP
完整的代码(需要Motif 2.1+和符合C99的编译器)是here
有谁能推荐一个适合显示Unicode字符的工作示例(不仅仅是XmStringGenerate())?

最佳答案

XmMULTIBYTE_TEXT是语言环境依赖的,正如n.m所建议的,除了CJK(即对于罗马语和斯拉夫语)之外,只能在UTF-8语言环境中使用。核心X11字体可以指定为两种字体(XmFONT_IS_FONT):

-monotype-arial-medium-r-normal--*-90-*-*-p-*-iso10646-1

或字体集(XmFONT_IS_FONTSET):
-monotype-arial-medium-r-normal--*-90-*-*-p-*-*-*:

说到XmWIDECHAR_TEXT模式,似乎不可能用显式编码来指定正确的字体,但是设置字体集对于Motif 2.1到2.3来说非常有效。

08-27 00:58