Maison  >  Article  >  développement back-end  >  Comment sortir correctement les chaînes UTF-8 vers « std :: cout » sous Windows ?

Comment sortir correctement les chaînes UTF-8 vers « std :: cout » sous Windows ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-31 07:36:01338parcourir

How to Output UTF-8 Strings Correctly to `std::cout` on Windows?

Traitement des chaînes UTF-8 en C sous Windows

L'encodage des chaînes au format UTF-8 est largement utilisé pour les applications multiplateformes. Cependant, la sortie de chaînes UTF-8 vers std::cout sous Windows présente des défis uniques.

Le comportement par défaut sous Windows est que std::cout s'attend à des chaînes dans des formats non Unicode. Lorsqu'il est présenté avec des chaînes UTF-8, il affiche des caractères corrompus.

Pour résoudre ce problème, il existe deux étapes principales :

  1. Définissez la page de codes de la console sur UTF-8. : À l'aide de la fonction SetConsoleOutputCP, informez la console que le flux d'octets entrant est codé en UTF-8.
  2. Activer la mise en mémoire tampon de flux : Désactivez le comportement par défaut de std::basic_filebuf dans Visual Studio, qui décompose les séquences d'octets UTF-8 et les transmet sous forme d'octets individuels. Pour surmonter ce problème, setvbuf active la mise en mémoire tampon du flux, garantissant que la chaîne entière est transmise dans son ensemble.

Voici un extrait de code révisé qui intègre ces solutions :

<code class="cpp">#include <string>
#include <iostream>
#include <Windows.h>
#include <cstdio>

int main() {
    // Set console code page to UTF-8
    SetConsoleOutputCP(CP_UTF8);

    // Enable buffering to prevent byte-by-byte transmission
    setvbuf(stdout, nullptr, _IOFBF, 1000);

    // Output UTF-8 string
    std::string test = u8"Greek: αβγδ; German: Übergrößenträger";
    std::cout << test << std::endl;

    return 0;
}</code>

De plus À ces étapes, notez que les polices raster de la console Windows peuvent ne pas afficher correctement les caractères Unicode non-ASCII. Pour permettre un rendu correct, il est recommandé de passer à une police TrueType, qui est désormais la police par défaut dans Windows 10 et versions ultérieures.

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