"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment imprimer correctement les caractères UTF-8 dans la console Windows avec des caractères allemands ?

Comment imprimer correctement les caractères UTF-8 dans la console Windows avec des caractères allemands ?

Publié le 2024-11-09
Parcourir:636

How to Print UTF-8 Character Correctly in Windows Console with German Characters?

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 lors de l'affichage des caractères allemands à l'aide d'un extrait de code spécifique :

#include 
#include 

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);
}

Malgré la définition de la page de codes de sortie sur UTF-8, les caractères allemands ne sont pas imprimés correctement.

Solution

Pour imprimer correctement les données Unicode dans le Console Windows, plusieurs méthodes sont disponibles :

  1. Utilisation directe de WriteConsoleW : Communiquez explicitement avec l'API de la console à l'aide de WriteConsoleW. Cette approche garantit que les données sont écrites correctement dans la console. Cependant, cela nécessite de faire la distinction entre les situations de sortie console et non console.
  2. Définition du mode de sortie : Définissez le mode de sortie des descripteurs de fichiers de sortie standard sur "_O_U16TEXT" ou "_O_U8TEXT" via _setmode. Cela permet aux fonctions de sortie de caractères larges d'afficher correctement les données Unicode sur la console. Notez que cette méthode nécessite d'utiliser uniquement des fonctions de caractères larges sur le flux sélectionné.
  3. Encodage CP_UTF8 : Imprimez le texte UTF-8 directement sur la console en définissant la page de codes de sortie de la console sur CP_UTF8 et en utilisant les fonctions de bas niveau ou une implémentation ostream personnalisée.

Dépannage

En cas de sortie incorrecte avec la troisième méthode :

putc('\302'); putc('\260'); // doesn't work with CP_UTF8

puts("\302\260"); // correctly writes UTF-8 data to Windows console with CP_UTF8 

Cela est dû au fait que l'API de la console interprète les données transmises dans des 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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3