Maison > développement back-end > C++ > le corps du texte

Comment afficher correctement les chaînes UTF-8 sur la console Windows : un guide complet ?

Susan Sarandon
Libérer: 2024-10-29 18:41:03
original
346 Les gens l'ont consulté

How to Display UTF-8 Strings Correctly on Windows Console: A Comprehensive Guide?

Sortie UTF-8 sous Windows : un guide complet

Windows présente un défi unique lors de l'écriture d'applications multiplateformes en C qui s'appuient sur Chaînes codées en UTF-8. Contrairement aux systèmes Unix, qui interprètent automatiquement les chaînes de 8 bits comme UTF-8, Windows nécessite une configuration spécifique pour faire de même.

Considérez le code suivant :

<code class="cpp">#include <string>
#include <iostream>

int main() {
    std::string test = u8"Greek: αβγδ; German: Übergrößenträger";
    std::cout << test;
    return 0;
}</code>
Copier après la connexion

Sur les systèmes Unix, ce code restituera correctement les caractères souhaités. Cependant, sous Windows, il affichera un texte tronqué en raison de l'attente par défaut de std::cout de chaînes de 8 bits au format Latin-1 ou au format similaire non Unicode.

Pour résoudre ce problème, Windows nécessite deux étapes de configuration. :

1. Définition de la page de code de la console sur UTF-8

Cela indique à la console d'interpréter le flux d'octets qu'elle reçoit comme UTF-8 :

<code class="cpp">SetConsoleOutputCP(CP_UTF8);</code>
Copier après la connexion

2. Activation de la mise en mémoire tampon dans std::cout

L'implémentation Visual Studio STL de std::basic_filebuf peut transmettre des séquences UTF-8 sous forme d'octets individuels, conduisant à une interprétation incorrecte de la console. En activant la mise en mémoire tampon, nous garantissons que les chaînes sont transmises dans leur intégralité :

<code class="cpp">setvbuf(stdout, nullptr, _IOFBF, 1000);</code>
Copier après la connexion

Avec ces configurations, les chaînes UTF-8 seront affichées avec précision sur la console Windows. Cependant, il est important de noter que les consoles Windows présentent toujours des problèmes hérités :

  • Polices raster : Ces polices ignorent la page de codes de la console, nécessitant l'utilisation de polices TrueType pour les fichiers non-ASCII. Caractères Unicode.
  • Police par défaut de Windows 7 : Jusqu'à Windows 10, la police par défaut était une police raster, nécessitant une configuration manuelle sur une police TrueType.

Par incorporant à la fois le code et le contexte, cette réponse révisée fournit une solution complète, étape par étape, pour imprimer des chaînes UTF-8 sous Windows, en tenant compte à la fois des considérations historiques et modernes.

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