2-байт (UCS-2) Широкие строки под GCC
-
04-10-2019 - |
Вопрос
При портировании My Visual C ++ в GCC я обнаружил, что DataType WCRA_T - это 4-байт UTF-32 по умолчанию. Я мог бы переопределить это с вариантом компилятора, но потом весь WCS * (WCSLEN, WCSCMP и т. Д.) Часть RTL отображается непригодным для использования, поскольку она предполагает 4-байт широкие строки.
На данный момент я переизделал 5-6 из этих функций с нуля и в мою реализацию. Но есть ли более элегантный вариант - скажи, сборка GCC RTL с 2-байтом WHAR-T тихо сидит где-то, ожидая быть связанным?
Специфические ароматы GCC I после Xcode на Mac OS X, Cygwin, и тот, который поставляется с Debian Linux Etch.
Решение 4
Reimlemented 5-6 из более распространенных функций WCS *, # определенные мои реализации.
Другие советы
Но есть ли более элегантный вариант - скажи, сборка GCC RTL с 2-байтом WHAR-T тихо сидит где-то, ожидая связанным?
Нет. Это конкретная платформа проблема, а не проблема GCC.
То есть платформа Linux ABI указывает, что wchar_t
32-битные ширины, поэтому вы должны использовать всю новую библиотеку (для которой ICU является популярным выбором), или портируйте свой код, чтобы обрабатывать 4-байт wchar_t
с. Все библиотеки, которые вы можете ссылаться, также предполагает 4-байт wchar_t
, а также буду Перерыв, если вы используете GCC -fshort-wchar
.
Но на Linux конкретно почти каждый стандартизировал на UTF-8 для всех многобитных кодировков.
Посмотрите Библиотека ICU. Отказ Это портативная библиотека с API UTF-16.
Как вы заметили, определяется реализацией WCHAR_T. Нет никакого способа портативной работы с этим типом данных.
Системы Linux в целом было преимущество в получении поддержки Unicode позже, после того, как все разбьевка UCS-2 было объявлено не очень великой идеей и использовать UTF-8 в качестве кодирования. Все системы системы все еще работают на CHAR *, а также безопасно Unicode.
Ваши лучшие ставки должны использовать библиотеку, которая управляет этим для вас: QT, ICU и т. Д.
Обратите внимание, что Cygwin имеет 2 байт WHAR_T для облегчения сетки с Windows.