Ich muss mein Programm ändern, um Unicode zu akzeptieren, das aus UTF-8 und den verschiedenen UTF-16- und UTF-32-Kodierungen stammen kann. Ich weiß nicht viel über Unicode (obwohl ich Joel Spolskys Artikel und Wikipedia Seite ).
Im Moment benutze ich std::istream
und lese meine Eingabe char
by char
und speichere (wenn nötig) in std::string
. Ich würde gerne
Wenn möglich, möchte ich auch so viel Platz wie möglich sparen (wenn wir also nicht mehr als ein Byte / Zeichen benötigen, benutzen wir es nicht). Soweit ich das verstehe, bedeutet dies, in UTF-8 zu speichern, was in Ordnung ist, aber ich kenne keine Standardzeichenfolge, die das tut (von dem, was ich verstehe, hat wchar_t
implementierungsdefinierte Größe und Kodierung). p>
UTF-8 spart Platz, solange Sie hauptsächlich die Standard-ASCII-Zeichen verwenden.
std :: string hat kein Problem mit UTF-8, da es keine 0 Bytes enthält. Sie können std :: string angeben, wie lange die Zeichen der Eingabe sind, wenn sie wie in UTF-32 NULL-Bytes haben. std :: string würde Ihnen nicht sagen können, wie viele Zeichen Ihre UTF-8-Zeichenfolge hat, Sie müssten eine externe Funktion verwenden.
Außerdem gibt es eine breite Version der std :: string mit wchar_t, im Gegensatz zu char, ich vergesse nur den Namen.
Auch gibt es Facetten für die Umwandlung zwischen Codierungen.
Sie können entweder die Standardbibliothek mit Boost verwenden. Oder Sie können die Funktionen zur Zeichenfolgenverarbeitung aus der C-Bibliothek verwenden. Es gibt auch Funktionen, die von Frameworks wie Qt und Tcl zur Verfügung gestellt werden.
Siehe zum Beispiel:
Sehen Sie sich von std :: string zu std an :: wstring für eingebettete Anwendungen? Frage
Wie Pukku sagte: Sie könnten Kopfschmerzen bekommen, weil die Tatsache, dass der C ++ - Standard dies vorschreibt, Wide-Streams sind erforderlich, um Double-Byte-Zeichen beim Schreiben in eine Datei in Single-Byte zu konvertieren, und wie diese Konvertierung durchgeführt wird, ist abhängig von der Implementierung.