Каковы более портативные и чистые способы обработки последовательностей символов Юникода в C и C ++?
как:
-Читать строки Unicode
-Конвертировать строки Unicode в ASCII для сохранения некоторых байтов (если пользователь только вводит ASCII)
-Печатать строки Unicode
Должен ли я использовать среду тоже? I ' Вы читали, например, о LC_CTYPE, должен ли я заботиться об этом как о разработчике?
Каковы более переносимые и чистые способы обработки последовательностей символов 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, которые должны помочь вам начать работу.)