Как преобразовать (не обязательно программно) между wchar_t Windows и GCC/Linux?

StackOverflow https://stackoverflow.com/questions/236125

  •  04-07-2019
  •  | 
  •  

Вопрос

Предположим, у меня есть строка Windows wchar_t:

L"\x4f60\x597d"

и

L"\x00e4\x00a0\x597d"

и хотел бы преобразовать его (не обязательно программно;это будет одноразовая вещь) в формат GCC/Linux wchar_t, который является UTF-32 AFAIK.Как мне это сделать?(было бы неплохо дать общее объяснение, но пример, основанный на этом конкретном случае, также будет полезен)

Пожалуйста, не направляйте меня на сайты конвертации персонажей.Я хотел бы преобразовать из формы L"\x(что-то)", а не из формы "конечный символ".

Это было полезно?

Решение

Одной из наиболее часто используемых библиотек для преобразования символов является библиотека ICU. http://icu-project.org/ Это, например.используется для некоторого повышения http://www.boost.org/ библиотеки.

Другие советы

Будет ли преобразование из UTF-16 (Visual C++) wchar_t форме) в UTF-8, затем, возможно, из UTF-8 в UCS-4 (GCC wchar_t форме), быть приемлемым ответом?

Если да, то в Windows вы можете использовать WideCharToMultiByte функция (с CP_UTF8 для CodePage параметр) для первой части преобразования.Затем вы можете либо вставить полученные строки UTF-8 непосредственно в свою программу, либо преобразовать их дальше. Здесь это сообщение, показывающее, как это сделал один человек;вы также можете написать свой собственный код или сделать это вручную (официальную спецификацию с разделом о том, как именно конвертировать UTF-8 в UCS-4, можно найти здесь).Может быть, есть более простой способ, я еще не слишком хорошо знаком с преобразованиями в Linux.

Вам нужно беспокоиться только о персонажах между \xD800 и \xDFFF включительно.Любой другой символ должен отображаться одинаково от UTF-16 до UCS-4 при заполнении нулями.

Игнасио прав: если не использовать какие-то редкие китайские иероглифы (или какие-то вымершие письменности), то сопоставление будет один к одному.(официальный жаргон звучит так: «если у вас нет персонажей за пределами BMP»)

Вот алгоритм на всякий случай: http://unicode.org/faq/utf_bom.html#utf16-3Но опять же, скорее всего, для вашего реального случая бесполезно.

Вы также можете использовать бесплатные исходники из Unicode (ftp://ftp.unicode.org/Public/PROGRAMS/CVTUTF)

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