Impression correcte des caractères UTF-8 dans la console Windows
Cet article vise à résoudre les défis rencontrés lors de la tentative d'impression de caractères UTF-8 dans la console Windows.
Description du problème
Les utilisateurs ont rencontré des difficultés pour afficher les caractères allemands à l'aide d'un extrait de code spécifique :
<code class="c++">#include <stdio.h> #include <windows.h> int main() { SetConsoleOutputCP(CP_UTF8); // German characters not appearing char const* text = "aäbcdefghijklmnoöpqrsßtuüvwxyz"; int len = MultiByteToWideChar(CP_UTF8, 0, text, -1, 0, 0); wchar_t *unicode_text = new wchar_t[len]; MultiByteToWideChar(CP_UTF8, 0, text, -1, unicode_text, len); wprintf(L"%s", unicode_text); }</code>
Malgré la configuration du page de code de sortie en UTF-8, les caractères allemands ne sont pas imprimés correctement.
Solution
Pour imprimer correctement les données Unicode dans la console Windows, plusieurs méthodes sont disponibles :
Dépannage
En cas de sortie incorrecte avec la troisième méthode :
<code class="c++">putc('2'); putc('0'); // doesn't work with CP_UTF8 puts("20"); // correctly writes UTF-8 data to Windows console with CP_UTF8 </code>
En effet, l'API de la console interprète les données transmises lors d'appels séparés comme des encodages illégaux lors de l'utilisation de CP_UTF8.
Pour résoudre ce problème, envisagez de créer une sous-classe streambuf qui gère avec précision la conversion de caractères multi-octets et maintient l'état de conversion entre les écritures.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!