2017-12-07 4 views
0

In C++ 11 und höher kann das Präfix u8 für ein Zeichenfolgenliteral char (Byte) -Sequenzen erstellen, die UTF-8-codiert sind.Ausgabe UTF-8 (u8) std :: string

Wie geben Sie diese Sequenzen zu einem std::ostream aus? Wie sagt man einem std::ostream, dass ein const char * oder std:string, die ausgegeben werden, Zeichen enthält, die in UTF-8 codiert sind, anstatt die Standardcodierung?

+0

Mit einer Mischung aus Depression, Verwirrung und Wut, lerne ich, dass [Unterstützung für Unicode in Standard C++ ist schrecklich] (https://stackoverflow.com/a/17106065/545127). – Raedwald

Antwort

1

Sie nicht. Der Stream weiß nicht, wie die Codierung des Textes aussieht. Trotz seines Namens wird char von std:ostream nicht als ein Zeichen behandelt, das in der Plattformcodierung codiert ist. Es muss char als zu schreibendes Byte behandelt werden. Es schreibt den "Text" (Byte-Sequenz) wie angegeben (außerhalb der möglichen Umsetzung \n Übersetzung), vorausgesetzt, dass Sie es nicht mit einer Facette, die das ändert. Wenn Sie Zeichen schreiben, die UTF-8 entsprechen, dann endet das in der Ausgabe.

+0

Willst du damit sagen, dass ein 'std :: ostream' eine 'std: string' als eine Folge von Bytes (ein Byte pro' char') behandelt und nicht eine Folge von Zeichen in der Plattform-Kodierung? – Raedwald

+0

@ Raedwald: Ja. Es ist nur eine Sequenz von 'char'. Was würde die Eingabe sonst noch behandeln? –

Verwandte Themen