В настоящее время я работаю над хобби-проектом (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. Но после того, как все это заработало, начались проблемы с переносом на Linux.
В настоящее время я думаю переделать все это, чтобы придерживаться простого char (UTF -8 ), потому что он работает как с Windows, так и с Linux, помня о том, что мне нужно «WideCharToMultiByte» для каждой строки в Windows для достижения UTF -8. Использование простых строк на основе char *значительно уменьшит количество исключений для Linux/Windows.
Есть ли у вас опыт работы с юникодом для кросс-платформы -? Есть какие-нибудь мысли об идее простого хранения данных в UTF -8 вместо использования wchar _t?