Как обрабатывать последовательности символов Юникода в C / C ++?

Каковы более портативные и чистые способы обработки последовательностей символов Юникода в C и C ++?

как:

-Читать строки Unicode

-Конвертировать строки Unicode в ASCII для сохранения некоторых байтов (если пользователь только вводит ASCII)

-Печатать строки Unicode

Должен ли я использовать среду тоже? I ' Вы читали, например, о LC_CTYPE, должен ли я заботиться об этом как о разработчике?

11
задан codaddict 2 September 2010 в 03:51
поделиться

1 ответ

Каковы более переносимые и чистые способы обработки последовательностей символов Unicode в C и C++?

Используйте библиотеку, например ICU. Если вы не можете, это абсолютно, черт возьми, вы не можете свернуть свой собственный. Однако будьте готовы к тяжелым временам. Кроме того, поищите Unicode.org документацию по образцу исходного кода.

Должен ли я также использовать среду?

Да. Возможно, вам также понадобится использовать функцию std::setlocale. Это позволит вам установить локаль, соответствующую кодировке, которую вы хотите, например. если вы хотите использовать британский английский в качестве языка и UTF-8 в качестве кодировки, вы должны установить LC_CTYPE в en_GB.UTF8 .

C++03 не позволяет работать с Unicode. Лучше всего использовать тип данных wchar_t (и расширение std::wstring). Однако обратите внимание, что размер и кодировка символов различаются в разных ОС. Например. Windows использует 2 байта для wchar_t и кодировки UTF-16, тогда как GNU/Linux и Mac OSX используют 4 байта и кодировку UTF-32.

C++0x должен исправить ситуацию, разрешив литералы Unicode codecvt фасеты, поддержку C Unicode TR (читай ) и т. д., но тогда это долгий путь для большинства компиляторов. (Здесь есть несколько вопросов по SO, которые должны помочь вам начать работу.)

3
ответ дан 3 December 2019 в 09:39
поделиться