Я пытаюсь выполнить очень простую задачу: возьмите unicode-aware wstring
и преобразуйте его в string
, закодированный как байты UTF8, а затем наоборот: возьмите string
, содержащий UTF8 байтов и преобразовать его в unicode-aware wstring
.
Проблема в том, что мне нужна кросс-платформа, и мне нужно, чтобы она работала с Boost... и я просто не могу понять, как заставить ее работать. Я играл с
- http://www.edobashira.com/2010/03/using-boost-code-facet-for-reading-utf8.html и
- http://www.boost.org/doc/libs/1_46_0/libs/serialization/doc/codecvt.html
Попытка конвертировать код для использования stringstream
/wstringstream
вместо файлов любого типа, но ничего не работает.
Например, в Python это будет выглядеть так:
>>> u"שלום"
u'\u05e9\u05dc\u05d5\u05dd'
>>> u"שלום".encode("utf8")
'\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d'
>>> '\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d'.decode("utf8")
u'\u05e9\u05dc\u05d5\u05dd'
То, что я в конечном счете, это следующее:
wchar_t uchars[] = {0x5e9, 0x5dc, 0x5d5, 0x5dd, 0};
wstring ws(uchars);
string s = encode_utf8(ws);
// s now holds "\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d"
wstring ws2 = decode_utf8(s);
// ws2 now holds {0x5e9, 0x5dc, 0x5d5, 0x5dd}
Я действительно не хочу добавлять другую зависимость от ICU или что-то в этом духе... но, насколько мне известно, это возможно с помощью Boost.
Некоторый пример кода будет очень оценен! Благодаря