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


Использование на международном уровне

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

В самом традиционном коде на C и C++ предполагается, что обработка знаков и строк не очень хорошо работает для международных приложений. Хотя и MFC, и библиотека времени выполнения поддерживают Юникод или многобайтовые кодировки, программисту все равно необходимо выполнить много действий. В этом разделе описывается значение понятия "использование на международном уровне" в Visual C++.

  • И Юникод, и многобайтовые кодировки доступны посредством переносимых типов данных в списках параметров функций MFC и возвращаемых типов. Эти типы определяются при определенных условиях соответствующим образом в зависимости от того, определен ли в сборке символ _UNICODE или символ _MBCS (обозначающий кодировку DBCS). Различные варианты библиотек MFC автоматически связываются с приложением в зависимости от определенного при построении символа.

  • В коде библиотеки классов используются переносимые функции времени выполнения и другие средства для обеспечения поддержки Юникода и многобайтовых кодировок.

  • Но все равно в коде необходимо выполнить определенные задачи интернационализации.

    • Необходимо использовать те же переносимые функции времени выполнения, делающие библиотеку MFC переносимой в различные среды.

    • Необходимо сделать строковые литералы и знаки переносимыми для любой среды с помощью макроса _T. Дополнительные сведения см. в разделе Универсальные текстовые соответствия в файле Tchar.h.

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

    • Необходимо проявлять осторожность при смешивании символов ANSI (8-разрядных) и символов Юникод (16-разрядных) в приложении. Возможно использование символов ANSI в одних частях программы и символов Юникода в других частях, но нельзя смешивать их в одной строке.

    • Не следует жестко кодировать строки в приложении. Вместо этого необходимо сделать их ресурсами STRINGTABLE, добавив их в RC-файл приложения. После этого приложение можно локализовать без изменения в исходном коде или перекомпиляции. Дополнительные сведения о создании и использовании ресурсов STRINGTABLE см. в разделе Редактор строк.

xxh1wfhz.alert_note(ru-ru,VS.90).gifПримечание.

В европейских и многобайтовых кодировках есть некоторые символы, такие как буквы с диакритическими знаками, чей код превышает 0x80. Так как в коде чаще всего используются символы со знаком, эти символы расширяются знаком после преобразования в тип int. При этом возникает проблема с индексацией массивов, так как символы, расширенные знаком, становятся отрицательными и выходят за пределы массива. Языки, использующие многобайтовые кодировки, например, японский язык, также уникальны. Так как символ может состоять из 1 или из 2 байт, следует всегда оперировать двумя байтами одновременно.

См. также

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

Юникод и многобайтовая кодировка

Стратегии международного использования