У меня есть строка UTF-8, которую я хочу отобразить в элементе управления HITextView (MLTE).Теоретически, HITextView требует либо «Текст», либо UTF-16, поэтому я конвертирую:
UniChar uniput[STRSIZE];
ByteCount converted,unilen;
err = ConvertFromTextToUnicode(C2UInfo, len, output,
kUnicodeUseFallbacksMask, 0, NULL, 0, NULL,
sizeof(UniChar)*STRSIZE,
&converted, &unilen, uniput);
err=TXNSetData(MessageObject, kTXNUnicodeTextData, uniput, unilen, kTXNEndOffset,
kTXNEndOffset);
Я определил конвертер C2UInfo
следующим образом:
UnicodeMapping uMapping;
uMapping.unicodeEncoding = CreateTextEncoding(kTextEncodingUnicodeV2_0,
kUnicodeCanonicalDecompVariant,
kUnicode16BitFormat);
uMapping.otherEncoding = GetTextEncodingBase(kUnicodeUTF8Format);
uMapping.mappingVersion = kUnicodeUseLatestMapping;
err = CreateTextToUnicodeInfo(&uMapping, &C2UInfo);
Это работаетхорошо для простых старых символов ASCII, но многобайтовый UTF-8 отображается на неправильные символы.Например, æ (LATIN SMALL LETTER AE) сопоставляется с 疆 (CJK UNIFIED IDEOGRAPH-7586).
Я попытался установить и снять флажок «Выводить текст в Unicode» в Интерфейсном Разработчикепопытался изменить некоторые из констант преобразования, но безрезультатно.
Он создается с Xcode 3.2.6 с использованием MacOSX10.5.sdk и протестирован в 10.6.