我试图使用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()
创建标签,明显不正常):
完整的代码(需要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来说非常有效。