Maison  >  Article  >  développement back-end  >  Comment afficher correctement les chaînes UTF-8 sur la console Windows : un guide complet ?

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

Susan Sarandon
Susan Sarandonoriginal
2024-10-29 18:41:03294parcourir

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>

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>

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>

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!

Déclaration:
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