c ++, cout und UTF-8

8

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!

%Vor%     
user657267 05.08.2011, 09:03
quelle

4 Antworten

1

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äß Ссылка

auf ISO-8859-1 eingestellt

Übrigens ist cout nicht "sterbend", da es offensichtlich weiterhin die Ausgabe nach Ihrer Testzeichenkette produziert.

    
koan 05.08.2011, 09:52
quelle
4

Wenn Ihr Programm Ihr aktuelles Gebietsschema verwenden soll, rufen Sie setlocale(LC_ALL, "") als erstes in Ihrem Programm auf. Andernfalls ist das Gebietsschema des Programms C und was es mit Nicht-ASCII-Zeichen macht, kann von uns Menschen nicht erkannt werden.

    
n.m. 05.08.2011 10:01
quelle
0

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.

    
rubenvb 05.08.2011 09:29
quelle
0

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.)

    
James Kanze 05.08.2011 09:41
quelle

Tags und Links