кодирование — C ++ с использованием ICU и библиотеки Nana GUI — преобразование строк?

Я только что провел несколько успешных тестов с 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, так что … может быть, кто-то еще работал над этим?

1

Решение

Ожидается большинство функций нана 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 срочно нуждается в обновлении (моя вина)

1

Другие решения

В соответствии с документацией ICU, массив UChar — это массив 16-битных символов … в большинстве реализаций это массив wchar_t. Это означает, что при условии, что wchar_t имеет ширину 16 бит в вашей системе, вы можете безопасно привести результат getTerminatedBuffer() функция к const wchar_t * и либо использовать его непосредственно в качестве строки символа C, либо использовать его для построения std::wstring,

0

По вопросам рекламы [email protected]