c++, de cout et de l'UTF-8

Espérons le, une question simple: cout semble mourir lors de la manipulation de chaînes de caractères qui se termine avec un multi-octets UTF-8 char, suis-je en train de faire quelque chose de mal? C'est avec GCC (Mingw) sur Win7 x64.

**Edit Désolé si je n'ai pas été assez clair, je ne suis pas préoccupé par les glyphes manquants ou comment les octets sont interprétés, mais simplement qu'ils ne sont pas en montrant à tout juste après l'appel à cout << s4 (manque le BAR). Toute couts après le premier affichage aucun texte!

#include <cstdio>
#include <iostream>
#include <string>

int main() {
    std::string s1("abc");
    std::string s2("…");  //… = 0xE2 80 A6
    std::string s3("…abc");
    std::string s4("abc…");

    //In C
    fwrite(s1.c_str(), s1.size(), 1, stdout);
    printf(" FOO ");
    fwrite(s2.c_str(), s2.size(), 1, stdout);
    printf(" BAR ");
    fwrite(s3.c_str(), s3.size(), 1, stdout);
    printf(" FOO ");
    fwrite(s4.c_str(), s4.size(), 1, stdout);
    printf(" BAR\n\n"); 

    //C++
    std::cout << s1 << " FOO " << s2 << " BAR " << s3 << " FOO " << s4 << " BAR ";
}

//results:

//abc FOO ��� BAR ���abc FOO abc… BAR

//abc FOO ��� BAR ���abc FOO abc…
Où en êtes-vous de l'exécution de votre programme? L'invite de commande Windows n'aime pas vraiment Unicode beaucoup, donc, même si votre programme est peut-texte de sortie, la console ne sait pas quoi faire avec elle.
La console Windows sous-système n'a pas de vrais problèmes. WriteConsoleW fonctionne raisonnablement bien, étant donné polices de caractères. Windows n'aime pas l'UTF-8, mais, ce qui signifie que WriteConsoleA va jusqu'à s'étouffer ici.
Fonctionne pour moi sous Ubuntu/gnome-terminal/GCC. Je soupçonne que l'obtention de ce droit exige que les deux C++ exactitude et prendre les spécificités de la plate-forme en ligne de compte.
Oh c'est vrai, je devrais avoir été plus précis.
Rediriger la sortie dans un fichier et ouvrez ce fichier dans le bloc-notes. Ce qui se passe?

OriginalL'auteur user657267 | 2011-08-05