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


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

Обновлен: Ноябрь 2007

При запуске операционной системы версии Windows 2000 или Windows XP, разрешающие многобайтовую кодировку, система разработки Visual C++ (в том числе редактор кода интегрированного источника, отладчик и программы командной строки) активирует многобайтовую кодировку за исключением окна памяти.

Окно памяти не распознает данные байтов как символы многобайтовой кодировки, несмотря на то, что расшифровывает символы ANSI или Юникода. Символы ANSI всегда имеют размер 1 байт, а символы Юникода — 2 байта. Размеры символов многобайтовой кодировки могут составлять 1 или 2 байта; расшифровка символов зависит от используемой кодовой страницы. По этой причине, окно памяти практически не может точно отобразить символы многобайтовой кодировки. Окно памяти не определяет, какой байт является началом символа. Для того чтобы определить изображение символа, разработчик может просмотреть значения байта в окне памяти, а также отыскать значение в таблицах. Это возможно, поскольку разработчику известна строка начального адреса, основанная на коде источника.

Visual C++ распознает двухбайтовые символы в случае необходимости. Символы включают названия пути и файла в диалоговом окне, а также текстовые записи в редакторе ресурсов Visual C++ (например, статический текст в диалоговом редакторе и статические текстовые записи в редакторе значка). Кроме того, препроцессор распознает некоторые двухбайтовые директивы, такие как названия файлов в операторах #include и аргументы в директивах pragma code_seg и data_seg. В источнике редактора кода двухбайтовые символы распознаются в комментариях и строковых литералах, которые не закодированы с помощью языковых элементов C/C++ (таких как названия переменных).

Поддержка редактора метода ввода (IME)

Приложения, предназначенные для рынков Западной Азии, используют многобайтовую кодировку (например, Япония) и обычно поддерживают систему Windows IME, которая позволяют вводить как однобайтовые, так и двухбайтовые символы. Среда разработки Visual C++ полностью поддерживает редактора метода ввода. Дополнительные сведения см. в разделе Образец редактора метода ввода: демонстрация способа управления режимом редактора и его реализации на 3 уровне.

Японские клавиатуры не поддерживают напрямую символы Кандзи. Редактор метода ввода конвертирует фонетические строки, вводя возможные изображения алфавита Кандзи в символ других японских алфавитов (Ромадзи, Катакана или Хирагана). Для того чтобы избежать двусмысленного толкования, можно выбрать несколько альтернативных вариантов. При выборе определенного символа алфавита Кандзи редактор метода ввода передает два сообщения WM_CHAR в управляющее приложение.

Редактор метода ввода, активированный сочетанием клавиш ALT+, отображается в виде набора кнопок (индикатора) и окна перехода. Приложение размещает окно в точку вставки текста. Приложение управляет WM_MOVE и сообщениями WM_SIZE, перемещая и преобразуя окно переходов в соответствии с новым расположением или размером целевого окна.

Если необходимо, чтобы пользователи приложения имели возможность вводить символы Кандзи, приложение должно расшифровывать сообщения редактора метода ввода Windows. Дополнительные сведения о программировании редактора метода ввода см. в разделе Редактор метода ввода.

Отладчик Visual C++

Отладчик Visual C++ предоставляет возможность установить функцию точки остановы в сообщениях редактора метода ввода. Дополнительно окно памяти может отображать двухбайтовые символы.

Программы командной строки

Программы командной строки Visual C++, в том числе компилятор NMAKE и компилятор ресурсов (RC.EXE), поддерживают многобайтовую кодировку. Можно использовать параметр компилятора ресурсов /c, чтобы изменить страницу кода во время компиляции ресурсов приложения.

Для того чтобы изменить языковой стандарт по умолчанию во время компиляции кода источника, используйте команду Установить языковой стандарт #pragma.

Графические программы

Visual C++ с программами на базе Windows, такими как Spy++ и редактирование ресурсов, полностью поддерживают строки редактора метода ввода.

См. также

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

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

Советы по программированию многобайтовой кодировки