Поддержка Юникода и многобайтовой кодировки
Некоторые языки, например японский и китайский, имеют большие наборы символов. Для поддержки программирования на этих рынках библиотека классов Microsoft Foundation (MFC) позволяет использовать два различных подхода к обработке больших наборов символов:
Юникод,
wchar_t
на основе расширенных символов и строк, закодированных как UTF-16.Многобайтовые наборы символов (MBCS) на
char
основе однобайтовых или двухбайтовых символов и строк, закодированных в наборе символов для языкового стандарта.
Примечание.
Корпорация Майкрософт рекомендует библиотеки Юникода MFC для всех новых разработок.
Библиотеки MBCS устарели в Visual Studio 2013 и Visual Studio 2015. Это больше не требуется.
Начиная с Visual Studio 2017, библиотеки MBCS больше не являются устаревшими и не создают предупреждения об отмене.
Поддержка 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 для строк MBCS
Библиотека классов также включена для многобайтовых наборов символов, но только для двухбайтовых наборов символов (DBCS).
В многобайтовом наборе символов символ может быть одним или 2 байтами. Если это 2 байта в ширину, его первый байт является специальным "байтом свинца", выбранным из определенного диапазона, в зависимости от используемой кодовой страницы. В совокупности свинца и "байты тропы" указывают уникальную кодировку символов.
Если символ _MBCS
определен для сборки программы, введите TCHAR
тип, на основе которого CString
используется, сопоставляется char
с . Это зависит от вас, чтобы определить, какие байты являются CString
потенциальными байтами и которые являются конечными байтами. Библиотека времени выполнения C предоставляет функции, помогающие определить это.
В DBCS указанная строка может содержать все однобайтовые символы ANSI, все двубайтовые символы или комбинацию двухбайтовых символов. Для этих возможностей требуется особое внимание при анализе строк. К ним относятся CString
объекты.
Примечание.
Сериализация строк Юникода в MFC может считывать строки Юникода и MBCS независимо от того, какая версия запущенного приложения. Файлы данных переносятся между версиями Юникода и MBCS вашей программы.
CString
Функции-члены используют специальные версии функций времени выполнения C или используют функции с поддержкой Юникода. Таким образом, например, если CString
функция обычно вызывается strcmp
, она вызывает соответствующую функцию _tcscmp
универсального текста. В зависимости от того, как определены символы _MBCS
и _UNICODE
определены, _tcscmp
сопоставляется следующим образом:
Символы | Function |
---|---|
_MBCS Определенные |
_mbscmp |
_UNICODE Определенные |
wcscmp |
Ни определенный символ | strcmp |
Примечание.
Символы _MBCS
и _UNICODE
являются взаимоисключающими.
Сопоставления универсальных текстовых функций для всех подпрограмм обработки строк во время выполнения рассматриваются в справочнике по библиотеке времени выполнения C. Список см. в разделе "Интернационализация".
Аналогичным образом CString
методы реализуются с помощью универсальных сопоставлений типов данных. Чтобы включить КАК MBCS, так и Юникод, MFC используется TCHAR
для char
или wchar_t*
(char
* LPTSTR
илиwchar_t
) и LPCTSTR
для const char
* или .const wchar_t*
Они обеспечивают правильные сопоставления для MBCS или Юникода.