Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Funkce, které nebyly implementovány s Unicode verze, jsou obvykle nahrazeny výkonnějšími nebo rozšířenými funkcemi, které podporují Unicode. Pokud například portujete kód, který volá funkci OpenFile, může vaše aplikace místo toho podporovat Kódování Unicode pomocí funkce CreateFile.
Pokud funkce nemá žádný ekvivalent Unicode, může aplikace namapovat znaky na 8bitové znakové sady před a po volání funkce. Například funkce formátování čísel atoi a itoa používají pouze číslice 0 až 9. Za normálních okolností mapování Unicode na 8bitové znaky způsobí ztrátu dat, ale můžete tomu zabránit tím, že nastavíte typ kódu nezávisle a nastavíte podmíněné výrazy. Příkazy v následujícím příkladu napsané pro 8bitové znaky jsou závislé na typu a měly by být změněny tak, aby podporovaly Unicode.
char str[4] = "137";
int num = atoi(str);
Tyto příkazy je možné přepsat následujícím způsobem, aby byly nezávislé na typu.
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
V tomto příkladu standardní funkce knihovny C wcstombs přeloží Unicode na ASCII. Příklad spoléhá na skutečnost, že číslice 0 až 9 lze vždy přeložit z Unicode do ASCII, i když některé okolní texty nemohou. Funkce atoi se zastaví na libovolném znaku, který není číslicí.
Aplikace může použít funkci National Language Support (NLS) LCMapString ke zpracování textu, který obsahuje nativní číslice poskytnuté pro některé skripty v Unicode.
Opatrnost
Nesprávné použití funkce wcstombs může ohrozit zabezpečení aplikace. Ujistěte se, že vyrovnávací paměť aplikace pro řetězec 8bitových znaků má alespoň velikost 2*(char_length +1), kde char_length představuje délku řetězce Unicode. Toto omezení je uloženo, protože při dvojbajtových znakových sadách (DBCS) lze každý znak Unicode namapovat na dva po sobě jdoucí 8bitové znaky. Pokud vyrovnávací paměť neobsahuje celý řetězec, výsledný řetězec není ukončen znakem null, což může představovat bezpečnostní riziko. Další informace o zabezpečení aplikací naleznete v tématu Aspekty zabezpečení: Mezinárodní funkce.
Související témata