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


Международное обеспечение

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

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

  • Код библиотеки классов использует переносимые функции времени выполнения и другие средства для обеспечения правильного поведения Юникода или MBCS.

  • В коде по-прежнему необходимо обрабатывать определенные виды задач интернационализации:

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

    • Сделайте литеральные строки и символы переносимыми в одной из сред с помощью макроса _T. Дополнительные сведения см. в разделе "Сопоставления универсального текста" в tchar.h.

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

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

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

Примечание.

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

См. также

Юникод и многобайтовая кодировка
Стратегии интернационализации