Utiliser la page de codes UTF-8Use the UTF-8 code page

Utilisez l’encodage de caractères UTF-8 pour une compatibilité optimale entre les applications Web et d’autres * plateformes Nix (UNIX, Linux et variantes), réduisez les bogues de localisation et réduisez la charge de test.Use UTF-8 character encoding for optimal compatibility between web apps and other *nix-based platforms (Unix, Linux, and variants), minimize localization bugs, and reduce testing overhead.

UTF-8 est la page de codes universelle pour l’internationalisation et peut encoder l’ensemble du jeu de caractères Unicode.UTF-8 is the universal code page for internationalization and is able to encode the entire Unicode character set. Il est utilisé de façon omniprésente sur le Web et est la valeur par défaut pour les plateformes * nix.It is used pervasively on the web, and is the default for *nix-based platforms.

Notes

Un caractère encodé prend entre 1 et 4 octets.An encoded character takes between 1 and 4 bytes. L’encodage UTF-8 prend en charge les séquences d’octets plus longues, jusqu’à 6 octets, mais le plus grand point de code de l’Unicode 6,0 (U + 10FFFF) ne prend que 4 octets.UTF-8 encoding supports longer byte sequences, up to 6 bytes, but the biggest code point of Unicode 6.0 (U+10FFFF) only takes 4 bytes.

API-A et-W-A vs. -W APIs

Les API Win32 prennent souvent en charge les variantes-A et-W.Win32 APIs often support both -A and -W variants.

-Les variantes reconnaissent la page de codes ANSI configurée sur le système et la prise en charge char* , tandis que les variantes-W fonctionnent en UTF-16 et prennent en charge WCHAR .-A variants recognize the ANSI code page configured on the system and support char*, while -W variants operate in UTF-16 and support WCHAR.

Jusqu’à récemment, Windows a mis en évidence « Unicode »-W variantes par rapport à des API.Until recently, Windows has emphasized "Unicode" -W variants over -A APIs. Toutefois, les versions récentes ont utilisé la page de codes ANSI et les API-A comme moyen d’introduire la prise en charge d’UTF-8 pour les applications.However, recent releases have used the ANSI code page and -A APIs as a means to introduce UTF-8 support to apps. Si la page de codes ANSI est configurée pour UTF-8,-les API fonctionnent en UTF-8.If the ANSI code page is configured for UTF-8, -A APIs operate in UTF-8. Ce modèle présente l’avantage de prendre en charge le code existant généré à l’aide d’API-A sans modification du code.This model has the benefit of supporting existing code built with -A APIs without any code changes.

Définir une page de code de processus en UTF-8Set a process code page to UTF-8

À partir de Windows version 1903 (mai 2019 Update), vous pouvez utiliser la propriété ActiveCodePage dans le appxmanifest pour les applications empaquetées, ou le manifeste fusion pour les applications non empaquetées, afin de forcer un processus à utiliser UTF-8 comme page de code de processus.As of Windows Version 1903 (May 2019 Update), you can use the ActiveCodePage property in the appxmanifest for packaged apps, or the fusion manifest for unpackaged apps, to force a process to use UTF-8 as the process code page.

Vous pouvez déclarer cette propriété et la cible/exécuter sur des versions précédentes de Windows, mais vous devez gérer la détection et la conversion de pages de codes héritées comme d’habitude.You can declare this property and target/run on earlier Windows builds, but you must handle legacy code page detection and conversion as usual. Avec une version cible minimale de Windows version 1903, la page de codes de processus sera toujours UTF-8, de sorte que la détection et la conversion des pages de codes héritées peuvent être évitées.With a minimum target version of Windows Version 1903, the process code page will always be UTF-8 so legacy code page detection and conversion can be avoided.

ExemplesExamples

Manifeste AppX pour une application empaquetée :Appx manifest for a packaged app:

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

Manifeste de fusion pour une application Win32 non empaquetée :Fusion manifest for an unpackaged Win32 app:

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

Notes

Ajoutez un manifeste à un fichier exécutable existant à partir de la ligne de commande avec mt.exe -manifest <MANIFEST> -outputresource:<EXE>;#1Add a manifest to an existing executable from the command line with mt.exe -manifest <MANIFEST> -outputresource:<EXE>;#1

Conversion de page de codesCode page conversion

Comme Windows fonctionne en mode natif dans UTF-16 ( WCHAR ), vous devrez peut-être convertir les données UTF-8 en UTF-16 (ou vice versa) pour interagir avec les API Windows.As Windows operates natively in UTF-16 (WCHAR), you might need to convert UTF-8 data to UTF-16 (or vice versa) to interoperate with Windows APIs.

MultiByteToWideChar et WideCharToMultiByte vous permettent de convertir des pages de codes UTF-8 et UTF-16 ( WCHAR ).MultiByteToWideChar and WideCharToMultiByte let you convert between UTF-8 and UTF-16 (WCHAR) (and other code pages). Cela s’avère particulièrement utile quand une API Win32 héritée peut uniquement comprendre WCHAR .This is particularly useful when a legacy Win32 API might only understand WCHAR. Ces fonctions vous permettent de convertir une entrée UTF-8 en WCHAR valeur pour passer à l’API a-W, puis de convertir tous les résultats si nécessaire.These functions allow you to convert UTF-8 input to WCHAR to pass into a -W API and then convert any results back if necessary. Lors de l’utilisation de ces fonctions avec la CodePage valeur CP_UTF8 , l’utilisation dwFlags de 0 ou de MB_ERR_INVALID_CHARS , sinon, ERROR_INVALID_FLAGS se produit.When using these functions with CodePage set to CP_UTF8, use dwFlags of either 0 or MB_ERR_INVALID_CHARS, otherwise an ERROR_INVALID_FLAGS occurs.

Notes

CP_ACP équivaut à CP_UTF8 uniquement en cas d’exécution sur Windows Version 1903 (mise à jour de mai 2019) ou version ultérieure et que la propriété ActiveCodePage décrite ci-dessus est définie sur UTF-8.CP_ACP equates to CP_UTF8 only if running on Windows Version 1903 (May 2019 Update) or above and the ActiveCodePage property described above is set to UTF-8. Dans le cas contraire, elle honore la page de codes système héritée.Otherwise, it honors the legacy system code page. Nous vous recommandons d’utiliser CP_UTF8 explicitement.We recommend using CP_UTF8 explicitly.