Hoffentlich eine einfache Frage: cout
scheint zu sterben, wenn man mit Strings arbeitet, die mit einem Multibyte-UTF-8-Zeichen enden, mache ich etwas falsch? Dies ist mit GCC (Mingw) auf Win7 x64.
** Bearbeiten Sorry, wenn ich nicht klar genug war, mache ich mir keine Gedanken über die fehlenden Glyphen oder wie die Bytes interpretiert werden, sondern dass sie nach dem Aufruf von cout << s4
gar nicht angezeigt werden (fehlende BAR) ). Irgendwelche weiteren cout
s nach der ersten Anzeige überhaupt keinen Text!
Das ist wirklich keine Überraschung. Wenn Ihr Terminal nicht auf UTF-8-Codierung eingestellt ist, woher weiß es, dass s2
nicht "(lateinischer Kleinbuchstabe a mit Zirkumflex) (Eurozeichen) (Pipe) sein soll",
Angenommen, Ihr Terminal ist gemäß Ссылка
Übrigens ist cout nicht "sterbend", da es offensichtlich weiterhin die Ausgabe nach Ihrer Testzeichenkette produziert.
Die Windows-Konsole behandelt standardmäßig nicht-lokale Codeseitenzeichen.
Sie müssen sicherstellen, dass im Konsolenfenster eine Unicode-fähige Schriftart festgelegt ist und dass die Codepage über einen Aufruf von chcp
auf UTF-8 gesetzt ist. Dies ist jedoch kein garantierter Erfolg.
Beachten Sie, dass "wcout" nichts ändert, wenn die Konsole die ausgefallenen Zeichen nicht anzeigen kann, weil ihre Schriftart verpfuscht ist.
Auf allen modernen Linux-Distributionen ist die Konsole auf UTF-8 eingestellt, und das sollte sofort funktionieren.
Wie andere bereits festgestellt haben, ist std::cout
unabhängig davon zumindest in "C"
locale (der Standard). Auf der anderen Seite muss Ihr Konsolenfenster so eingerichtet sein, dass UTF-8 angezeigt wird: Codepage 65001. Versuchen Sie, chcp 65001
aufzurufen, bevor Sie Ihr Programm ausführen. (Dies hat für mich in der Vergangenheit funktioniert.)