Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функции, которые не были реализованы с версией Юникода, обычно заменены более мощными или расширенными функциями, поддерживающими Юникод. Например, если вы переносите код, вызывающий функцию OpenFile, приложение может поддерживать Юникод с помощью функции CreateFile.
Если функция не имеет эквивалента Юникода, приложение может сопоставлять символы с 8-разрядными наборами символов до и после вызова функции. Например, функции форматирования чисел atoi и itoa используют только цифры от 0 до 9. Как правило, сопоставление Юникода с 8-разрядными символами приводит к потере данных, но это можно избежать, сделав код независимым от типа и делая выражения условными. Инструкции в следующем примере, написанные для 8-разрядных символов, зависят от типа и должны быть изменены для поддержки Юникода.
char str[4] = "137";
int num = atoi(str);
Эти утверждения могут быть переписаны следующим образом, чтобы сделать их независимыми от типа.
TCHAR tstr[4] = TEXT("137");
#ifdef UNICODE
size_t cCharsConverted;
CHAR strTmp[SIZE]; // SIZE equals (2*(sizeof(tstr)+1)). This ensures enough
// room for the multibyte characters if they are two
// bytes long and a terminating null character. See Security
// Alert below.
wcstombs_s(&cCharsConverted, strTmp, sizeof(strTmp), (const wchar_t *)tstr, sizeof(strTmp));
num = atoi(strTmp);
#else
int num = atoi(tstr);
#endif
В этом примере стандартная функция библиотеки C wcstombs преобразует Юникод в ASCII. В примере используется тот факт, что цифры от 0 до 9 всегда могут быть переведены из Юникода в ASCII, даже если некоторые из окружающих текста не могут. Функция atoi останавливается на любом символе, который не является цифрой.
Приложение может использовать функцию поддержки национального языка (NLS) LCMapString для обработки текста, включающего собственные цифры, предоставленные для некоторых сценариев в Юникоде.
Осторожность
Использование функции wcstombs некорректно может скомпрометировать безопасность вашего приложения. Убедитесь, что буфер приложения для строки 8-разрядных символов имеет по крайней мере размер 2*(char_length +1), где char_length представляет длину строки Юникода. Это ограничение делается из-за того, что при использовании двухбайтовых наборов символов (DBCSs), каждый символ Юникода можно сопоставить с двумя последовательными 8-разрядными символами. Если буфер не содержит всю строку, результирующая строка не завершается значением NULL, что представляет угрозу безопасности. Дополнительные сведения о безопасности приложений см. в разделе Вопросы безопасности: международные функции.
Связанные разделы