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

Некоторые языки, например японский и китайский, имеют большие наборы символов. Для поддержки программирования на этих рынках библиотека классов Microsoft Foundation (MFC) позволяет использовать два различных подхода к обработке больших наборов символов:

  • Юникод, wchar_t на основе расширенных символов и строк, закодированных как UTF-16.

  • Многобайтовые символьные наборы (МБ CS)char на основе однобайтовых или двойных байтовых символов и строк, закодированных в наборе символов для языкового стандарта.

Примечание.

Корпорация Майкрософт рекомендует библиотеки Юникода MFC для всех новых разработок.
Библиотеки МБ CS устарели в Visual Studio 2013 и Visual Studio 2015. Это больше не требуется.
Начиная с Visual Studio 2017, библиотеки МБ CS больше не рекомендуется и не создают предупреждения об отмене.

Поддержка MFC строк Юникода

Вся библиотека классов MFC условно включена для символов и строк Юникода, хранящихся в широких символах в виде UTF-16. В частности, класс CString включен в Юникоде.

Эти библиотеки, отладчик и DLL-файлы используются для поддержки Юникода в MFC:

U.LIB версииMFC
UD версииMFC. LIB
MFCMверсииU.LIB
UD версииMFCM. LIB
MFCSверсииU.LIB
UD версииMFCS. LIB
UAFXCW. LIB
UAFXCWD. LIB

MFCверсииU.PDB
UD версииMFC. PDB
MFCMверсииU.PDB
UD версииMFCM. PDB
MFCSверсииU.PDB
UD версииMFCS. PDB
UAFXCW. PDB
UAFXCWD. PDB

U.DLL версииMFC
UD.DLL версииMFC
ВерсияMFCMU.DLL
UD.DLL версииMFCM

(версия представляет номер версии файла. Например, "140" означает версию 14.0.)

CString основан на типе TCHAR данных. Если символ _UNICODE определен для сборки программы, TCHAR определяется как тип wchar_t, 16-разрядный тип кодировки символов. TCHAR В противном случае определяется как charобычная 8-разрядная кодировка символов. Таким образом, CString в Юникоде используется 16-разрядный символ. Без Юникода он состоит из символов типа char.

Чтобы завершить программирование в Юникоде приложения, необходимо также:

  • _T Используйте макрос для условного кода строк литералов, которые будут переноситься в Юникод.

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

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

  • Используйте следующие типы данных для символов и указателей символов:

    • Используйте место, где вы будете TCHAR использовать char.

    • Используйте место, где вы будете LPTSTR использовать char*.

    • Используйте место, где вы будете LPCTSTR использовать const char*. CString предоставляет оператор LPCTSTR для преобразования между CString и LPCTSTR.

CString также предоставляет конструкторы с поддержкой Юникода, операторы назначения и операторы сравнения.

Справочник по библиотеке времени выполнения определяет переносимые версии всех функций обработки строк. Дополнительные сведения см. в разделе "Интернационализация категорий".

Поддержка MFC для строк МБ CS

Библиотека классов также включена для многобайтовых наборов символов, но только для двухбайтовых наборов символов (DBCS).

В многобайтовом наборе символов символ может быть одним или 2 байтами. Если это 2 байта в ширину, его первый байт является специальным "байтом свинца", выбранным из определенного диапазона, в зависимости от используемой кодовой страницы. В совокупности свинца и "байты тропы" указывают уникальную кодировку символов.

Если символ _MBCS определен для сборки программы, введите TCHARтип, на основе которого CString используется, сопоставляется charс . Это зависит от вас, чтобы определить, какие байты являются CString потенциальными байтами и которые являются конечными байтами. Библиотека времени выполнения C предоставляет функции, помогающие определить это.

В DBCS указанная строка может содержать все однобайтовые символы ANSI, все двубайтовые символы или комбинацию двухбайтовых символов. Для этих возможностей требуется особое внимание при анализе строк. К ним относятся CString объекты.

Примечание.

Сериализация строк Юникода в MFC может считывать строки Юникода и МБ CS независимо от версии запущенного приложения. Файлы данных переносятся между Юникодом и МБ CS версий программы.

CString Функции-члены используют специальные версии функций времени выполнения C или используют функции с поддержкой Юникода. Таким образом, например, если CString функция обычно вызывается strcmp, она вызывает соответствующую функцию _tcscmp универсального текста. В зависимости от того, как определены символы _MBCS и _UNICODE определены, _tcscmp сопоставляется следующим образом:

Символы Function
_MBCS Определенные _mbscmp
_UNICODE Определенные wcscmp
Ни определенный символ strcmp

Примечание.

Символы _MBCS и _UNICODE являются взаимоисключающими.

Сопоставления универсальных текстовых функций для всех подпрограмм обработки строк во время выполнения рассматриваются в справочнике по библиотеке времени выполнения C. Список см. в разделе "Интернационализация".

Аналогичным образом CString методы реализуются с помощью универсальных сопоставлений типов данных. Чтобы включить как МБ CS, так и Юникод, MFC используется TCHAR для char или ( LPTSTRchar* или wchar_twchar_t*) и LPCTSTR для const char* или .const wchar_t* Они обеспечивают правильные сопоставления для МБ CS или Юникода.

См. также

Строки (ATL/MFC)
Операции со строками