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.
Kódování znaků 8bitového formátu UTF-8 (Unicode Transformation Format) umožňuje maximalizovat kompatibilitu mezi webovými aplikacemi a dalšími platformami založenými na nix (Unix, Linux a varianty), minimalizovat chyby lokalizace a snížit režijní náklady na testování.
UTF-8 je univerzální znaková stránka pro internacionalizaci a dokáže zakódovat celou znakovou sadu Unicode. Používá se široce na webu a je výchozím kódováním pro platformy založené na JAZYCE XML i *nix.
Nastavit znakovou stránku procesu na UTF-8
Od verze Windows 1903 (aktualizace z května 2019) můžete zadat vlastnost activeCodePage v appxmanifestu pro zabalené aplikace (nebo fúzní manifest pro rozbalené aplikace) k vynucení procesu použití UTF-8 jako znakové stránky procesu.
Poznámka:
Rozhraní grafického zařízení systému Windows (GDI) v současné době nepodporuje nastavení vlastnosti activeCodePage na proces. Místo toho se GDI ve výchozím nastavení nastaví na aktivní systémovou znakovou stránku. Pokud chcete aplikaci nakonfigurovat tak, aby vykreslovala text UTF-8 prostřednictvím rozhraní GDI, přejděte do části Nastavení>Čas a jazyk>Jazyk a oblast>nastavení správce jazyků>Změnit systémové národní prostředí a zaškrtněte Beta: Použít Unicode UTF-8 pro podporu jazyků po celém světě. Potom restartujte počítač, aby se změna projevila.
Můžete deklarovat vlastnost activeCodePage a cílit a spustit na dřívějších buildech Windows, ale musíte zpracovat detekci a převod starší verze kódové stránky tak jako obvykle. S minimální cílovou verzí Systému Windows verze 1903 bude znaková stránka procesu vždy UTF-8, takže se můžete vyhnout detekci a převodu starší verze znakové stránky.
Poznámka:
V UTF-8 je kódovaný znak reprezentován posloupností 1 až 4 bajty. (Viz definice D92 v kapitole 3standardu Unicode pro formální specifikaci.)
Příklady
Manifest Appx pro zabalenou aplikaci:
<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
...
xmlns:uap7="http://schemas.microsoft.com/appx/manifest/uap/windows10/7"
xmlns:uap8="http://schemas.microsoft.com/appx/manifest/uap/windows10/8"
...
IgnorableNamespaces="... uap7 uap8 ...">
<Applications>
<Application ...>
<uap7:Properties>
<uap8:activeCodePage>UTF-8</uap8:activeCodePage>
</uap7:Properties>
</Application>
</Applications>
</Package>
manifest fúzní pro rozbalenou aplikaci Win32:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity type="win32" name="..." version="6.0.0.0"/>
<application>
<windowsSettings>
<activeCodePage xmlns="http://schemas.microsoft.com/SMI/2019/WindowsSettings">UTF-8</activeCodePage>
</windowsSettings>
</application>
</assembly>
Poznámka:
Přidejte manifest do existujícího spustitelného souboru z příkazového řádku pomocí mt.exe -manifest <MANIFEST> -outputresource:<EXE>;#1příkazu .
-A vs. rozhraní API -W
Rozhraní API Win32 často podporují jak variantu -A, tak i variantu -W.
-A varianty rozpoznávají znakovou stránku ANSI nakonfigurovanou v systému a podporují char*, zatímco -W varianty fungují v UTF-16 a podporují WCHAR.
Až donedávna systém Windows upřednostňoval varianty Unicode -W před rozhraními -A API. Nedávné verze však jako prostředek k zavedení podpory UTF-8 pro aplikace používaly znakovou stránku ANSI a -A rozhraní API. Pokud je znaková stránka ANSI nakonfigurovaná pro UTF-8, -A rozhraní API obvykle fungují v UTF-8. Tento model má výhodu podpory existujícího kódu vytvořeného pomocí rozhraní API -A bez jakýchkoli změn kódu.
Převod kódové stránky
Vzhledem k tomu, že Systém Windows pracuje nativně v UTF-16 (WCHAR), možná budete muset převést data UTF-8 na UTF-16 (nebo naopak), aby bylo možné interoperativně s rozhraními API systému Windows.
MultiByteToWideChar a WideCharToMultiByte umožňují převod mezi UTF-8 a UTF-16 (WCHAR) (a dalšími znakovými stránkami). To je zvlášť užitečné, když starší rozhraní API Win32 může rozumět pouze WCHAR. Tyto funkce umožňují převést vstup UTF-8, aby bylo možné WCHAR předat do rozhraní API -W, a v případě potřeby převést všechny výsledky zpět.
Použijte dwFlags u buď 0 nebo MB_ERR_INVALID_CHARS při použití těchto funkcí s CodePage nastaveným na CP_UTF8 (jinak dojde k ERROR_INVALID_FLAGS).
Poznámka:
CP_ACP
CP_UTF8 se rovná pouze v případě, že běží ve Windows verze 1903 (květen 2019 Update) nebo vyšší a vlastnost activeCodePage popsaná výše je nastavena na UTF-8. Jinak respektuje starší systémovou kódovou stránku. Doporučujeme použít CP_UTF8 explicitně.
Související témata
- stránky kódu
- identifikátory kódové stránky
Windows developer