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


Поддержка Юникода

Юникод — это спецификация для поддержки всех наборов символов, включая те, которые не могут быть представлены в одном байте. Если вы программуете для международного рынка, рекомендуется использовать Юникод или многобайтовый набор символов (MBCS). Или напишите код программы так, чтобы ее можно было скомпилировать, изменив параметр.

Расширенный символ — это двухбайтовый многоязыковой код символа. Десятки тысяч символов, составляющих почти все символы, используемые в современных вычислениях во всем мире, включая технические символы и специальные символы публикации, можно представить в соответствии со спецификацией Юникода как один широкий символ, закодированный с помощью UTF-16. Символы, которые не могут быть представлены только в одном широком символе, можно представить в паре Юникода с помощью функции суррогатной пары Юникода. Поскольку почти каждый символ, используемый в повседневной жизни, представлен в UTF-16 как один 16-разрядный широкий символ, широкие символы упрощают программирование с международными наборами символов. Широкие символы, закодированные с помощью UTF-16LE (для маленького эндиана) — это собственный формат символов для Windows.

Строка расширенных символов представляется как массив wchar_t[], и на нее указывает указатель wchar_t*. Любой символ ASCII может быть представлен как расширенный символ путем добавления к нему префикса "L". Например, "L'\0'" является завершающим широким (16-битным) символом NULL. Подобным образом все строковые литералы, составленные из символов ASCII, могут быть представлены как строковые литералы из расширенных символов путем добавления к литералу ASCII префикса "L" (L"Hello").

Как правило, расширенные символы занимают больше памяти, чем многобайтовые символы, однако они обрабатываются быстрее. Кроме того, в многобайтовой кодировке может быть представлена только одна локаль, в то время как все наборы символов в мире представлены одновременно с помощью Юникода.

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

Типы переносимых данных в MFC

Непереносимый тип данных Заменено этим макросом
char, wchar_t _TCHAR
char*, LPSTR (тип данных Win32), LPWSTR LPTSTR
const char*, LPCSTR (тип данных Win32), LPCWSTR LPCTSTR

Класс CString используется _TCHAR в качестве основы и предоставляет конструкторы и операторы для простых преобразований. Большинство операций со строками Юникода может быть написано с помощью средств, которые используются для обработки кодировки Windows ANSI. Единственным отличием является то, что основной единицей операции является шестнадцатибитный символ, а не восьмибитный. В отличие от многобайтовых кодировок нет необходимости (и не следует) обрабатывать символы Юникода как два отдельных байта. Однако необходимо иметь дело с возможностью одного символа, представленного суррогатной парой широких символов. Как правило, не следует писать код, предполагающий, что длина строки совпадает с числом символов (узких или широких), содержащихся в ней.

Что вы хотите сделать?

См. также

Текст и строки
Поддержка использования wmain