Использование на международном уровне
В самом традиционном коде на C и C++ предполагается, что обработка знаков и строк не очень хорошо работает для международных приложений.Хотя и MFC, и библиотека времени выполнения поддерживают Юникод или многобайтовые кодировки, программисту все равно необходимо выполнить много действий.В этом разделе описывается значение понятия "использование на международном уровне" в Visual C++.
И Юникод, и многобайтовые кодировки доступны посредством переносимых типов данных в списках параметров функций MFC и возвращаемых типов.Эти типы определяются при определенных условиях соответствующим образом в зависимости от того, определен ли в сборке символ _UNICODE или символ _MBCS (обозначающий кодировку DBCS).Различные варианты библиотек MFC автоматически связываются с приложением в зависимости от определенного при построении символа.
В коде библиотеки классов используются переносимые функции времени выполнения и другие средства для обеспечения поддержки Юникода и многобайтовых кодировок.
Но все равно в коде необходимо выполнить определенные задачи интернационализации.
Необходимо использовать те же переносимые функции времени выполнения, делающие библиотеку MFC переносимой в различные среды.
Необходимо сделать строковые литералы и знаки переносимыми для любой среды с помощью макроса _T.Дополнительные сведения см. в разделе Универсальные текстовые соответствия в файле Tchar.h.
Следует предпринять меры предосторожности при синтаксическом анализе строк при использовании многобайтовой кодировки.При использовании Юникод предосторожности не нужны.Дополнительные сведения см. в разделе Советы по программированию многобайтовых кодировок.
Необходимо проявлять осторожность при смешивании символов ANSI (8-разрядных) и символов Юникод (16-разрядных) в приложении.Возможно использование символов ANSI в одних частях программы и символов Юникода в других частях, но нельзя смешивать их в одной строке.
Не следует жестко кодировать строки в приложении.Вместо этого необходимо сделать их ресурсами STRINGTABLE, добавив их в RC-файл приложения.После этого приложение можно локализовать без изменения в исходном коде или перекомпиляции.Дополнительные сведения о создании и использовании ресурсов STRINGTABLE см. в разделе Редактор строк.
Примечание |
---|
В европейских и многобайтовых кодировках есть некоторые символы, такие как буквы с диакритическими знаками, чей код превышает 0x80.Так как в коде чаще всего используются символы со знаком, эти символы расширяются знаком после преобразования в тип int.При этом возникает проблема с индексацией массивов, так как символы, расширенные знаком, становятся отрицательными и выходят за пределы массива.Языки, использующие многобайтовые кодировки, например, японский язык, также уникальны.Так как символ может состоять из 1 или из 2 байт, следует всегда оперировать двумя байтами одновременно. |