2010-05-17 6 views
19

Es wurde in mehreren Quellen erwähnt, dass C++ 0x bessere Unterstützung für Unicode auf Sprachenebene bietet (einschließlich Typen und Literalen).Welche neuen Unicode-Funktionen gibt es in C++ 0x?

Wenn die Sprache diese neuen Funktionen hinzufügt, ist es nur natürlich anzunehmen, dass auch die Standardbibliothek verwendet wird. Ich kann jedoch derzeit keine Referenzen auf die neue Standardbibliothek finden. Ich erwartete, die Antwort für diese Antworten zu finden:

  1. Bietet die neue Bibliothek Standardmethoden zum Konvertieren von UTF-8 zu UTF-16 usw.?
  2. Ermöglicht die neue Bibliothek das Schreiben von UTF-8 in Dateien auf die Konsole (oder von Dateien aus der Konsole). Wenn ja, können wir Cout benutzen oder brauchen wir etwas anderes?
  3. Enthält die neue Bibliothek "grundlegende" Funktionen wie: Erkennen der Byteanzahl und Länge einer UTF-8-Zeichenfolge, Konvertieren in Groß-/Kleinschreibung (berücksichtigt dies den Einfluss von Gebietsschemas?)

Schließlich sind irgendwelche dieser Funktionen in jedem populären Compiler wie GCC oder Visual Studio verfügbar?

Ich habe versucht, nach Informationen zu suchen, aber ich kann nichts finden. Ich beginne tatsächlich zu denken, dass diese Dinge vielleicht noch nicht einmal entschieden sind (ich bin mir bewusst, dass C++ 0x eine Arbeit in Arbeit ist).

Antwort

13

Bietet die neue Bibliothek Standardmethoden zum Konvertieren von UTF-8 in UTF-16 usw.?
Nein. Die neue Bibliothek stellt jedoch std::codecvt Facetten zur Verfügung, die die Konvertierung für Sie durchführen, wenn Sie mit Iostream arbeiten. ISO/IEC TR 19769: 2004, der C-Unicode Technical Report, ist fast wörtlich im neuen Standard enthalten.

Ermöglicht die neue Bibliothek das Schreiben von UTF-8 in Dateien, auf die Konsole (oder von Dateien aus der Konsole). Wenn ja, können wir Cout benutzen oder brauchen wir etwas anderes?
Ja, Sie würden nur cout mit der richtigen codecvt Facette imbue. Beachten Sie jedoch, dass die Konsole diese Zeichen nicht korrekt anzeigen muss

Enthält die neue Bibliothek "grundlegende" Funktionen wie: Erkennen der Byteanzahl und Länge einer UTF-8-Zeichenfolge, Konvertierung in Großbuchstaben/Kleinbuchstaben -case (berücksichtigt dies den Einfluss von Gebietsschemas?)
AFAIK, dass Funktionalität mit dem vorhandenen C++ 03-Standard vorhanden ist. std::toupper und std::towupper funktionieren natürlich genauso wie in früheren Versionen des Standards. Es gibt keine neuen Funktionen, die speziell für Unicode arbeiten.

Wenn Sie solche Dinge benötigen, müssen Sie sich immer noch auf eine externe Bibliothek verlassen - die <iostream> ist das Hauptstück, das nachgerüstet wurde.

Was, speziell, wird für Unicode im neuen Standard hinzugefügt?

  • Unicode Literale, über U8 "", u "" und U ""
  • std::char_traits Klassen für UTF-8, UTF-16 und UTF-32
  • mbrtoc16, c16rtomb, mbrtoc32 und c32rtomb von ISO/IEC TR 19769: 2004
  • std::codecvt Facetten für die Lokalisierungs-Bibliothek
  • die std::wstring_convert Klassenschablone (die den Mechanismus für die codecvt Codesatz Konvertierungen verwendet)
  • Die std::wbuffer_convert, die das gleiche wie wstring_convert mit Ausnahme von Raw-Arrays, nicht Strings.
+1

Beachten Sie, dass speziell 'std :: toupper()' nicht für Unicode umgerüstet ist. Manchmal müsste ein einzelnes Eingabezeichen in * mehrere * Ausgabezeichen umgewandelt werden. Punkt für Fall: 'toupper ('ß')' würde "" SS "geben müssen. 'toupper()' (gibt immer ein einzelnes Zeichen zurück) kann das nicht liefern. – DevSolar