Was sind die mehr tragbar und sauber Wege Unicode-Zeichen Sequenzen in C und C++ zu behandeln?
Alle Zeichenfolgen in Ihrem Programm müssen UTF-8, UTF-16, or UTF-32 sein.Wenn Sie aus irgendeinem Grund mit einer Nicht-Unicode-Codierung arbeiten müssen, führen Sie die Konvertierung für die Eingabe und Ausgabe durch.
lesen Unicode-Strings
gleiche Weise können Sie eine ASCII-Datei gelesen hatte. Aber es gibt immer noch viele Nicht-Unicode-Daten, also sollten Sie überprüfen, ob die Daten Unicode sind. Wenn dies nicht der Fall ist (oder UTF-8, wenn Ihre bevorzugte interne Kodierung UTF-32 ist), müssen Sie es konvertieren.
- UTF-8 und UTF-32 können durch Validierung zuverlässig erkannt werden.
- UTF-16 kann durch das Vorhandensein einer Stückliste erkannt werden.
- Wenn es keine UTF-Codierung ist, ist es wahrscheinlich in ISO-8859-1 oder Windows-1252.
Konvertieren Unicode-Strings zu einige Bytes speichern (wenn der Benutzer nur Eingänge ASCII)
Sie nicht in ASCII. Wenn Ihre Daten ausschließlich ASCII sind, nimmt UTF-8 genau den gleichen Speicherplatz ein. Und wenn nicht, verlieren Sie Informationen, wenn Sie in ASCII konvertieren. Wenn Sie sich um das Speichern von Bytes kümmern.
- Wählen Sie die optimale UTF-Codierung. Für die Zeichen U + 0000 bis U + 007F ist UTF-8 der kleinste. Für die Zeichen U + 0800 bis U + FFFF ist UTF-16 der kleinste.
- Verwenden Sie Datenkomprimierung wie Gzip. Es gibt eine SCSU-Codierung, die speziell für Unicode entwickelt wurde, aber ich weiß nicht, wie gut sie ist.
Print Unicode-Strings
Schreiben UTF-8 aus nicht anders ASCII zu schreiben.
Außer an der Windows-Eingabeaufforderung, weil es immer noch die alten "OEM" -Seiten verwendet. Dort können Sie WriteConsoleW mit UTF-16-Strings verwenden.
Sollte ich auch die Umgebung benutzen? Ich habe über LC_CTYPE zum Beispiel gelesen, sollte mich das als Entwickler interessieren?
LC_CTYPE
ist ein Überbleibsel aus der Zeit, als jede Sprache eine eigene Zeichencodierung hatte und damit seine eigenen ctype.h
Funktionen. Heute kümmert sich die Unicode Character Database darum. Die Schönheit von Unicode ist, dass es trennt Zeichencodierung Handhabung von Gebietsschema Handhabung (mit Ausnahme der special uppercase/lowercase rules für Litauisch, Türkisch und Azeri).
Aber jede Sprache hat immer noch eigene Sortierregeln und Zahlenformatierungsregeln, sodass Sie für diese immer noch Gebietsschemata benötigen. Und Sie müssen die Zeichencodierung Ihres Gebietsschemas auf UTF-8 einstellen.
Bezogen auf http://stackoverflow.com/questions/3613149/3614105#3614105 – dan04