Я пытаюсь отобразить некоторые Unicode (на самом деле кириллицу), используя XmLabel
и шрифт XLFD на стороне сервера (-monotype-arial-medium-r-normal--*-90-*-*-p-*-iso10646-1
). Всякий раз, когда я использую XmStringCreate()
или XmStringCreateLtoR()
как завод XmString
, результат соответствует моим ожиданиям.XmStringGenerate() в режиме XmMULTIBYTE_TEXT или XmWIDECHAR_TEXT
Когда я пытаюсь использовать XmStringGenerate()
завод, однако, проходя в любом XmMULTIBYTE_TEXT
для многобайтовой строки в Unicode, или XmWIDECHAR_TEXT
для широкой строки, мусор визуализируется на экране, независимо от используемого шрифта (я пробовал оба UTF-8
и однобайтовые кириллические серверные шрифты).
Результат можно увидеть ниже (1-й 2 строки в порядке, второй через 6-лейблов были созданы с XmStringGenerate()
и, очевидно, не нормально):
Полный код (требуется Motif 2.1+ и C99-совместимый компилятор) - here.
Может ли кто-нибудь предложить рабочий пример XmStringGenerate()
, подходящий для отображения Unicode символов (не только ISO-8859-1
)?
Ида-приграмма от fbida https://www.kraxel.org/releases/fbida/ использует XmStringGenerate и работает с текстом UTF-8 в моей системе. Я не очень разбираюсь в Motif, поэтому я не могу сказать вам, что именно отличается от этого и вашего кода. –
@ n.m .: Посмотрел исходный код 'ida'. В принципе, то, что я нашел до сих пор, - это «XmCHARSET_TEXT», которое может использоваться для отображения многоуровневой строки независимым от языка образом: «XmStringGenerate (mbs,« UTF-8 », XmCHARSET_TEXT, NULL)». С другой стороны, 'ida' использует' XmStringGenerate (mbs, NULL, XmMULTIBYTE_TEXT, NULL) ', но это работает только для локалей Unicode (установка' LANG' на 'C' ломает программу, если она не отменяет локаль через' setlocale() 'при запуске). – Bass
Да, многобайтовый текст - это только UTF-8, если ваш язык - UTF-8. Вы знаете, что есть другие локали, некоторые из которых имеют свои собственные многобайтовые кодировки, отличные от UTF-8. –