Megosztás:


UTF-8 kódlapok használata Windows-alkalmazásokban

A Unicode Transformation Format 8 bites (UTF-8) karakterkódolásával maximalizálhatja a webalkalmazások és más *nix-alapú platformok (Unix, Linux és változatok) közötti kompatibilitást, minimalizálhatja a honosítási hibákat, és csökkentheti a tesztelési többletterhelést.

Az UTF-8 a nemzetköziesítés univerzális kódlapja, amely képes a teljes Unicode-karakterkészlet kódolására. Széles körben használják a weben, és ez az alapértelmezett kódolás xml és *nix-alapú platformokon.

Folyamatkódlap beállítása UTF-8-ra

A Windows 1903-as verziójától (2019. májusi frissítés) megadhatja az activeCodePage tulajdonságot a csomagolt alkalmazások appxmanifestjében (vagy a csomagolatlan alkalmazások fúziós jegyzékében), hogy kényszerítse a folyamatot az UTF-8 folyamatkódlapként való használatára.

Megjegyzés:

A Windows grafikus eszköz felülete (GDI) jelenleg nem támogatja az activeCodePage tulajdonság beállítását folyamatonként. Ehelyett a GDI alapértelmezés szerint az aktív rendszerkódlapra van beállítva. Ha úgy szeretné konfigurálni az alkalmazást, hogy UTF-8-szöveget jelenítsen meg GDI-n keresztül, lépjen a Windows Beállítások>idő és nyelv>nyelv & régió>felügyeleti nyelvi beállításainak>módosítására, és ellenőrizze a bétaverziót: A Unicode UTF-8 használata a globális nyelvtámogatáshoz. Ezután indítsa újra a számítógépet a módosítás érvénybe lépéséhez.

Deklarálhatja az activeCodePage tulajdonságot, és megcélzhatja/futtathatja a korábbi Windows-buildeket, de a szokásos módon kell kezelnie a régi kódlapok észlelését és konvertálását. A Windows 1903-as verziójának minimális célverziója esetén a folyamatkód oldala mindig UTF-8 lesz, így elkerülhető a régi kódlapok észlelése és konvertálása.

Megjegyzés:

Az UTF-8-ban a kódolt karaktereket 1–4 bájtos sorozat jelöli. (A formális specifikációhoz lásd a Unicode Standard3. fejezetében található D92 definíciót.)

Példák

Appx-jegyzékcsomag egy csomagolt alkalmazáshoz:

<?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>

Fúziós jegyzék egy csomagolatlan Win32-alkalmazáshoz:

<?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>

Megjegyzés:

Adjon hozzá egy jegyzékfájlt egy meglévő végrehajtható fájlhoz a következő parancssorból mt.exe -manifest <MANIFEST> -outputresource:<EXE>;#1: .

-A és -W API-k

A Win32 API-k gyakran támogatják -A és -W változatokat is.

-A -A variánsok felismerik a rendszeren konfigurált ANSI-kódlapot és támogatják char*, míg a -W variánsok az UTF-16-ban működnek, és támogatják WCHAR.

A közelmúltig a Windows a "Unicode" -W változatokat helyezte előtérbe a -A API-kkal szemben. A legutóbbi kiadások azonban az ANSI kódlapját használták, és -A API-kat az UTF-8 alkalmazásokhoz való támogatásának bevezetéséhez. Ha az ANSI-kódlap az UTF-8-hoz van konfigurálva, akkor -A API-k általában az UTF-8-ban működnek. Ennek a modellnek az előnye, hogy kódmódosítások nélkül támogatja a -A API-kkal létrehozott meglévő kódot.

Kódlap konvertálása

Mivel a Windows natív módon működik az UTF-16-ban (WCHAR), előfordulhat, hogy az UTF-8 adatokat UTF-16-ra kell konvertálnia (vagy fordítva), hogy együttműködjön a Windows API-kkal.

A MultiByteToWideChar és a WideCharToMultiByte lehetővé teszi az UTF-8 és az UTF-16 () (WCHARés más kódlapok) közötti konvertálást. Ez különösen akkor hasznos, ha egy örökölt Win32 API esetleg csak a WCHAR-et érti meg. Ezek a függvények lehetővé teszik, hogy az UTF-8 bemenetet WCHAR formátumúvá alakítsa egy -W API-val való együttműködéshez, majd szükség esetén visszaalakítsa az eredményeket.

Amikor a dwFlags be van állítva 0-re, használja a MB_ERR_INVALID_CHARS vagy CodePage közül a CP_UTF8-t ezekkel a függvényekkel (ellenkező esetben ERROR_INVALID_FLAGS történik).

Megjegyzés:

CP_ACP Ez csak akkor felel meg, CP_UTF8 ha a Windows 1903-on (2019. májusi frissítés) vagy újabb verzión fut, és a fent leírt activeCodePage tulajdonság értéke UTF-8. Ellenkező esetben tiszteletben tartja az örökölt rendszerkódlapot. Javasoljuk, hogy a CP_UTF8 kifejezetten legyen használva.