Maison > développement back-end > C++ > 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 ?

Patricia Arquette
Libérer: 2024-10-26 17:15:02
original
1115 Les gens l'ont consulté

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 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>
Copier après la connexion

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 :

  1. Utilisation directe de WriteConsoleW : Communiquez avec l'API de la console explicitement en utilisant 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 le fonctions de bas niveau ou une implémentation ostream personnalisée.

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal