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


Различия строковых функций

В этом разделе описываются различия между строковыми функциями, используемыми в обработке сведений юникода и набора символов. Эти функции имеют Юникода и реализации кодовой страницы Windows для поддержки параметров кодовой страницы Юникода и Windows.

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

Значение длины, полученное одной из функций длины строки, всегда основано на обычной ширине символов: 8 бит для кодовых страниц Windows, 16 бит для Юникода. Это значение часто называется "числом символов". Этот термин строго правильно, так как кодовые страницы Windows, использующие двубайтовые наборы символов (DBCSS), имеют некоторые символы полной ширины, которые фактически представлены двумя последовательными байтами. Аналогичная ситуация возникает для суррогатных в Юникоде.

Следующие строковые функции чувствительны к языковому стандарту текущего потока, производным от языка, который пользователь выбирает на панели управления. Функции lstrcmp и lstrcmpi не выполняют сравнения байтов, например имена ANSI, например strcmp. Вместо этого они сравнивают строки в соответствии с правилами языкового стандарта.

Следующие функции преобразуются между набором символов OEM и текущей кодовой страницей Windows или Юникодом в зависимости от используемой версии:

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

Спецификация формата Тип данных для версии кодовой страницы Windows Тип данных для версии Юникода
c ОБУГЛИВАТЬ WCHAR
C WCHAR ОБУГЛИВАТЬ
hc, hC ОБУГЛИВАТЬ ОБУГЛИВАТЬ
hs, hS LPSTR LPSTR
lc, lC WCHAR WCHAR
ls, lS LPWSTR LPWSTR
s LPSTR LPWSTR
S LPWSTR LPSTR

 

Тип данных для выходного текста всегда зависит от версии функции. Если тип данных входного параметра и тип данных выходного текста не согласен, функция печати выполняет преобразование из Юникода на текущую кодовую страницу Windows или наоборот.

Для версии функций печати Юникод строка формата — Юникод, как и выходной текст.

Осторожность

Низкая обработка буфера связана со многими проблемами безопасности, включающими переполнение буфера. См. справочник Strsafe.h. Функции, определенные в Strsafe.h, обеспечивают дополнительную обработку буферов в коде. По этой причине они предназначены для замены встроенных аналогов C/C++, а также конкретных реализаций Microsoft Windows. Дополнительные сведения см. в разделе Вопросы безопасности: международные функции.

 

Юникод в API Windows