Поделиться через


Поддержка многобайтовых кодировок

Многобайтовые кодировки (MBCS) — это более старый подход к поддержке кодировок, подобных японской и китайской, которые не могут быть представлены одним байтом. Для разработки новых приложений следует использовать Юникод для всех текстовых строк, за исключением, возможно, системных строк, которые не видны пользователям. MBCS — это устаревшая технология, которая не рекомендуется для разработки новых приложений.

Наиболее распространенная реализация многобайтовой кодировки — двухбайтовая кодировка (DBCS). Visual C++ в целом и MFC в частности полностью поддерживают DBCS.

Примеры см. в файлах исходного кода MFC.

Для платформ, использующих объемные кодировки, наилучшая альтернатива Юникоду — это MBCS. MFC поддерживает MBCS с помощью интернациализируемых типов данных и функций времени выполнения C. То же следует сделать и в вашем коде.

В MBCS символы кодируются одним или двумя байтами. В двухбайтовых символах первый или старший байт указывает, что он и следующий байт должны интерпретироваться как один символ. Первый байт относится к диапазону кодов, зарезервированных для использования в качестве старших байтов. То, какие диапазоны байтов могут быть старшими байтами, зависит от используемой кодовой страницы. Например, японская кодовая страница 932 использует в качестве старших байтов диапазон 0x81–0x9F, но корейская кодовая страница 949 использует другой диапазон.

Учитывайте следующие аспекты при программировании с использованием MBCS.

Символы MBCS в символах среды MBCS могут отображаться в строках, таких как имена файлов и каталогов.

Операции редактирования

Операции редактирования в приложениях с MBCS должны работать с символами, а не байтами. Курсор не должен разделять символ, клавиша СТРЕЛКА ВПРАВО должна перемещаться вправо один символ и т. д. Удаление должно удалить символ; Отмена должна перенастраивает его.

Обработка строк

В приложении, использующем MBCS, обработка строк вызывает особые проблемы. Символы из одного и двух байтов могут быть перемешаны в одной строке. Поэтому необходимо всегда проверять старшие байты.

Поддержка библиотеки времени выполнения

Библиотеки времени выполнения языка C и MFC поддерживают однобайтовые и многобайтовые кодировки, а также Юникод. Однобайтовые строки обрабатываются с str помощью семейства функций времени выполнения, строки MBCS обрабатываются с соответствующими _mbs функциями, а строки Юникода обрабатываются с соответствующими wcs функциями. В реализациях функций-членов классов MFC используются переносимые функции времени выполнения, которые в некоторых обстоятельствах сопоставляются с обычным семейством функций str, функциями MBSC или функциями Юникода, как описано в разделе "Переносимость MBSC и Юникода".

Переносимость MBSC и Юникода

С помощью файла заголовка tchar.h можно создавать однобайтовые приложения, MBCS и Юникод из одного источника. Tchar.h определяет макросы, префиксированные с _tcs, которые сопоставляются с strфункциями_mbs, wcs соответствующим образом. Чтобы создать MBCS, определите символ _MBCS. Чтобы создать Юникод, определите символ _UNICODE. По умолчанию _UNICODE определяется для приложений MFC. Дополнительные сведения см. в разделе "Сопоставления универсального текста" в tchar.h.

Примечание.

Поведение не определено при определении обоих _UNICODE и _MBCS.

Файлы заголовков Mbctype.h и Mbstring.h определяют функции и макросы MBCS, которые могут понадобиться в некоторых случаях. Например, _ismbblead сообщает, является ли указанный байт в строке старшим.

Для международной переносимости кодируйте программу с помощью юникодов или многобайтовых наборов символов (MBCS).

Что вы хотите сделать?

См. также

Текст и строки
Поддержка многобайтовой кодировки MBCS в Visual C++