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 :
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!