Межплатформенный -юникод в C/C++ :Какую кодировку использовать?

В настоящее время я работаю над хобби-проектом (C/C++ ), который должен работать как в Windows, так и в Linux с полной поддержкой Unicode. К сожалению, Windows и Linux используют разные кодировки, что усложняет нашу жизнь.

В своем коде я пытаюсь использовать данные как можно универсальнее, упрощая их как для Windows, так и для Linux. В Windows wchar _t по умолчанию кодируется как UTF -16, а в Linux как UCS -4 (поправьте меня, если я ошибаюсь ).

Моя программа открывает ({ _wfopen, UTF -16, Windows}, {fopen, UTF -8, Linux} )и записывает данные в файлы в UTF -8. Пока что это все выполнимо. Пока я не решил использовать SQLite.

Интерфейс SQLite C/C++ позволяет использовать одну или две -байтовые закодированные строки(нажмите). Конечно, это не работает с wchar _t в Linux, так как wchar _t в Linux по умолчанию имеет размер 4 байта. Поэтому для записи и чтения из sqlite требуется конвертация под Linux.

В настоящее время код загроможден исключениями для Windows/Linux. Я надеялся придерживаться стандартной идеи хранения данных в wchar _t:

  • wchar _t в Windows :Пути к файлам без проблем, чтение/запись в sqlite без проблем. Запись данных в файл в любом случае должна выполняться в кодировке UTF -8.
  • wchar _t в Linux :Исключение для путей к файлам из-за кодировки UTF -8, преобразование перед чтением/записью в sqlite (wchar _t ), и то же самое для окон при записи данных в файл.

После прочтения(здесь)Я был убежден, что должен придерживаться wchar _t в Windows. Но после того, как все это заработало, начались проблемы с переносом на Linux.

В настоящее время я думаю переделать все это, чтобы придерживаться простого char (UTF -8 ), потому что он работает как с Windows, так и с Linux, помня о том, что мне нужно «WideCharToMultiByte» для каждой строки в Windows для достижения UTF -8. Использование простых строк на основе char *значительно уменьшит количество исключений для Linux/Windows.

Есть ли у вас опыт работы с юникодом для кросс-платформы -? Есть какие-нибудь мысли об идее простого хранения данных в UTF -8 вместо использования wchar _t?

9
задан Community 23 May 2017 в 10:29
поделиться