UnicodeString to char * (UTF-8) - PullRequest
       32

UnicodeString to char * (UTF-8)

8 голосов
/ 30 июня 2010

Я использую библиотеку ICU в C ++ на OS X. Все мои строки - UnicodeStrings, но мне нужно использовать системные вызовы, такие как fopen, fread и так далее.Эти функции принимают const char * или char * в качестве аргументов.Я прочитал, что OS X поддерживает UTF-8 внутри, так что все, что мне нужно сделать, - это конвертировать мою UnicodeString в UTF-8, но я не знаю, как это сделать.

UnicodeString имеет функцию-член toUTF8 (), но возвращает ByteSink.Я также нашел эти примеры: http://source.icu -project.org / repos / icu / icu / trunk / source / samples / ucnv / convsamp.cpp и прочитал об использовании конвертера, но явсе еще в замешательстве.Любая помощь приветствуется.

Ответы [ 3 ]

7 голосов
/ 30 июня 2010

вызовите UnicodeString::extract(...) для извлечения в char *, передайте NULL для конвертера, чтобы получить конвертер по умолчанию (который находится в кодировке, которую будет использовать ваша ОС).

4 голосов
/ 06 апреля 2014

Руководство пользователя ICU> UTF-8 предоставляет методы и описания для этого.

Самый простой способ использовать строки UTF-8 в API-интерфейсах UTF-16 - это методы C ++ icu::UnicodeString fromUTF8(const StringPiece &utf8) и toUTF8String(StringClass &result). Существует также toUTF8(ByteSink &sink).

И extract() сейчас не предпочтительнее.

Примечание: icu::UnicodeString имеет конструкторы, setTo() и extract() методы, которые принимают либо объект-преобразователь, либо имя набора символов. Они могут использоваться для UTF-8, но не так эффективны или удобны, как методы fromUTF8() / toUTF8() / toUTF8String(), упомянутые выше.

3 голосов
/ 24 октября 2013

Это будет работать:

std::string utf8;
uStr.toUTF8String(utf8);
...