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


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

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

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

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

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

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

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

Спецификация формата Тип данных для версии кодовой страницы Windows Тип данных для версии Юникода
с CHAR WCHAR
C WCHAR CHAR
hc, hC CHAR CHAR
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. Дополнительные сведения см. в разделе Вопросы безопасности: международные функции.

 

Юникод в Windows API