Преобразование многобайтовых символов в UTF-8

Мое приложение должно записывать данные в файл XML, который будет прочитан файлом swf. SWF ожидает, что данные в XML будут в кодировке UTF-8. Мне нужно преобразовать некоторые многобайтовые символы в моем приложении (упрощенный китайский, японский, корейский и т. д.) в UTF-8. Существуют ли какие-либо вызовы API, которые могли бы позволить мне это сделать? Я бы предпочел не использовать сторонние библиотеки DLL. Мне нужно сделать это как на Windows, так и на Mac, и я бы предпочел любой системный API, если он доступен.

спасибо jbsp72


person jbsp72    schedule 21.01.2010    source источник


Ответы (2)


UTF-8 - это многобайтовая кодировка (точнее, кодировка с переменной длиной байта). Утверждения, что вам нужно конвертировать из многобайтовой кодировки, недостаточно. Вам нужно указать, в какой многоканальной кодировке находится ваш источник?

person troelskn    schedule 21.01.2010
comment
Кроме того, укажите среду/язык, для которых это необходимо. - person Bandi-T; 24.01.2010

Мне нужно преобразовать некоторые многобайтовые символы в моем приложении (упрощенный китайский, японский, корейский и т. д.) в UTF-8.

если ваша исходная строка находится в многобайтовом формате (китайский/арабский/тайский/и т. д.), и вам нужно преобразовать ее в другой многобайтовый (UTF-8), один из способов - сначала преобразовать в WideCharacter (UTF-16), а затем преобразовать обратно к многобайтовому.

multibyte(chinese/arabic/thai/etc) -> widechar(UTF-16) -> multibyte(UTF-8)

если ваша исходная строка уже находится в Unicode (UTF-16), вы можете пропустить первое преобразование на приведенном выше рисунке.

вы можете указать кодовую страницу из MSDN.

В Google Chrome есть несколько реализаций преобразования строк для Windows, Linux и Mac. Вы можете увидеть его здесь или здесь. файлы находятся в src/base:
+ sys_string_conversions.h
+ sys_string_conversions_linux .cc
+ sys_string_conversions_win.cc
+ sys_string_conversions_mac.mm

Код использует лицензию BSD, поэтому вы можете использовать его для коммерческих проектов.

person Afriza N. Arief    schedule 21.01.2010