Вопрос

При портировании 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top