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


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

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

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

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

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

В многобайтовой кодировке знаки представлены 1 или 2 байтами. В 2-байтовых знаках первый (старший) байт указывает на то, что его и последующий байт необходимо обрабатывать как один знак. Значение первого байта лежит в диапазоне кодов, зарезервированных для использования в качестве старших байтов. Какой диапазон байтов может содержать старшие байты, зависит от используемой кодовой страницы. Например, японская кодовая страница 932 использует в качестве старших байтов диапазон от 0x81 до 0x9F, но корейская кодовая страница 949 использует другой диапазон.

Все эти факты необходимо учитывать при программировании с использованием многобайтовых кодировок.

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

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

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

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

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

Примечание

Если одновременно задать оба символа _UNICODE и _MBCS, поведение не определено.

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

Чтобы приложение переносилось на международном уровне, следует использовать кодировку Юникода или многобайтовую кодировку.

Задачи, которые необходимо выполнить

См. также

Основные понятия

Поддержка кодировок в С++

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