Я только что провел несколько успешных тестов с ICU на C / C ++. Мне нужно проанализировать разные CSV-файлы с разными кодировками (может быть UTF-8, UTF-16LE,), внести некоторые изменения в данные и, наконец, вывести все как UTF-8 в файл. Вот почему мой выбор пал на реанимацию. Обнаружение набора символов обычно работает довольно хорошо, обработка символов и преобразование в UTF-8 тоже.
Теперь я хотел объединить ту библиотечную часть, которая выполняет загрузку, манипуляции с CSV и так далее, с библиотекой графического интерфейса Nana. Нана, кажется, использует std :: string и std :: wstring.
Поскольку ICU хранит все данные внутри себя как UTF-16, так что либо я получил UChars или UnicodeStrings при работе с ICU. Но как я могу использовать любой из них с Nana, который не «интегрируется» с ICU? Любой способ преобразовать массивы UChar в wstring или UnicodeString в wstring?
Не нашел никаких намеков в документации ICU, так что … может быть, кто-то еще работал над этим?
Ожидается большинство функций нана std::string
закодировано в UTF-8.
Вы могли бы использовать Функции ICU что взять или вернуть char *
сделать преобразование в UTF-8.
Несколько функций нана, как widget::caption
иметь перегрузки для std::wstring
ожидается, что он будет закодирован в UTF-16 (в Windows) или UTF-32 (в Linux), который может быть использован для передачи ОС, какой может быть строка с собственным типом символов и кодировкой.
В случае, если вам нужны преобразования, нана предлагает nana::charset
который может управлять (явно или неявно) некоторыми наиболее часто необходимыми преобразованиями из / в UTF-8 / UTF-16 / UTF-32.
Если вы экспериментируете прохождение static_cast<wchar_t *>(some_UChar*)
Нане, пожалуйста, сообщите нам о результате. Я не могу проверить
Нана документация о лечении Unicode срочно нуждается в обновлении (моя вина)
В соответствии с документацией ICU, массив UChar — это массив 16-битных символов … в большинстве реализаций это массив wchar_t. Это означает, что при условии, что wchar_t имеет ширину 16 бит в вашей системе, вы можете безопасно привести результат getTerminatedBuffer()
функция к const wchar_t *
и либо использовать его непосредственно в качестве строки символа C, либо использовать его для построения std::wstring
,