Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Usare la codifica dei caratteri UTF-8 (Unicode Transformation Format a 8 bit) per ottimizzare la compatibilità tra le app Web e altre piattaforme basate su nix (Unix, Linux e varianti), ridurre al minimo i bug di localizzazione e ridurre il sovraccarico dei test.
UTF-8 è la tabella codici universale per l'internazionalizzazione ed è in grado di codificare l'intero set di caratteri Unicode. Viene usato ampiamente sul Web ed è la codifica predefinita per le piattaforme basate su XML e *nix.
Impostare una tabella codici del processo su UTF-8
A partire da Windows versione 1903 (aggiornamento di maggio 2019), puoi specificare la proprietà activeCodePage in appxmanifest per le app in pacchetto (o il manifesto fusion per le app non in pacchetto) per forzare un processo a usare UTF-8 come tabella codici del processo.
Nota
L'interfaccia GDI (Graphics Device Interface) di Windows attualmente non supporta l'impostazione della proprietà activeCodePage per processo. Per impostazione predefinita, invece, GDI utilizza la codepage del sistema attivo. Per configurare l'app per rendere il testo UTF-8 tramite GDI, vai su Impostazioni> diWindows>Tempo e lingua>Lingua e area geografica>Impostazioni amministrative della lingua e seleziona Modifica impostazioni locali del sistema e seleziona Beta: Usa Unicode UTF-8 per il supporto linguistico mondiale. Quindi riavviare il PC per rendere effettiva la modifica.
Puoi dichiarare la proprietà activeCodePage ed eseguire/targetizzare sulle build precedenti di Windows, ma devi gestire il rilevamento e la conversione delle pagine di codice legacy come di consueto. Con una versione di destinazione minima di Windows versione 1903, la tabella codici del processo sarà sempre UTF-8, quindi è possibile evitare il rilevamento e la conversione della tabella codici legacy.
Nota
In UTF-8 un carattere codificato è rappresentato da una sequenza da 1 a 4 byte. Per la specifica formale, vedere la definizione D92 nel capitolo 3 dello standard Unicode .
Esempi
Manifesto appx per un'app in pacchetto:
<?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>
Manifesto Fusion per un'app Win32 non in pacchetto:
<?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>
Nota
Aggiungere un manifesto a un eseguibile esistente dalla riga di comando con mt.exe -manifest <MANIFEST> -outputresource:<EXE>;#1.
-A e -W APIs
Le API Win32 supportano spesso varianti -A e -W.
-Le varianti riconoscono la tabella codici ANSI configurata nel sistema e supportano char*, mentre le varianti -W operano in UTF-16 e supportano WCHAR.
Fino a poco tempo fa, Windows evidenziava le varianti "Unicode" -W rispetto alle API -A. Tuttavia, le versioni recenti hanno usato la tabella codici ANSI e le API -A come mezzo per introdurre il supporto UTF-8 alle app. Se la tabella codici ANSI è configurata per UTF-8, le API -A funzionano in genere in UTF-8. Questo modello offre il vantaggio di supportare il codice esistente compilato con le API -A senza modifiche al codice.
Conversione delle tabelle codici
Poiché Windows opera in modo nativo in UTF-16 (WCHAR), potrebbe essere necessario convertire i dati UTF-8 in UTF-16 (o viceversa) per interagire con le API di Windows.
MultiByteToWideChar e WideCharToMultiByte consentono di eseguire la conversione tra UTF-8 e UTF-16 (WCHAR) (e altre tabelle codici). Ciò è particolarmente utile quando un'API Win32 legacy può comprendere solo WCHAR. Queste funzioni consentono di convertire l'input UTF-8 in WCHAR per passare in un'API -W e quindi convertire i risultati, se necessario.
Usare dwFlags di 0 o MB_ERR_INVALID_CHARS quando si utilizzano queste funzioni con CodePage impostato su CP_UTF8 (altrimenti si verifica ERROR_INVALID_FLAGS).
Nota
CP_ACP equivale a CP_UTF8 solo se in esecuzione in Windows Versione 1903 (aggiornamento di maggio 2019) o versione successiva e la proprietà activeCodePage descritta in precedenza è impostata su UTF-8. In caso contrario, rispetta la tabella codici di sistema legacy. È consigliabile usare CP_UTF8 in modo esplicito.