Преобразуйте ICU UnicodeString в зависимый от платформы символ char * (или std :: string) - PullRequest
1 голос
/ 08 декабря 2010

В моем приложении я использую ICU UnicodeString для хранения своих строк.Поскольку я использую некоторые библиотеки, несовместимые с ICU, мне нужно преобразовать UnicodeString в его зависимое от платформы представление.

В основном мне нужно сделать, чтобы обратная форма процесса создала новый объект UnicodeString - новую UnicodeString ("строку, закодированную в системной локали").

Я обнаружил эту тему - так что я знаю, что это может быть сделано с использованием stringstream.

Так что мой ответ, может ли это быть сделано в некоторыхДругой простой способ, без использования stringstream для преобразования?

Ответы [ 3 ]

1 голос
/ 08 декабря 2010

Вы можете использовать UnicodeString :: extract () с кодовой страницей (или конвертером). На самом деле передача NULL для кодовой страницы будет использовать то, что ICU обнаружил в качестве кодовой страницы по умолчанию.

1 голос
/ 10 февраля 2015

я использую

std::string converted;
us.toUTF8String(converted);

используется (ICU) UnicodeString

0 голосов
/ 08 декабря 2010

Вы можете использовать функции в ucnv.h, а именно void ucnv_fromUnicode (UConverter *converter, char **target, const char *targetLimit, const UChar **source, const UChar *sourceLimit, int32_t *offsets, UBool flush, UErrorCode *err). Это не хороший C ++ API, такой как UnicodeString, но он будет работать.

Я бы порекомендовал просто придерживаться operator<<, который вы уже используете, если это возможно. Это стандартный способ обработки лексических преобразований (то есть строки в / из целых чисел) в C ++ в любом случае.

...