Gibt es Aktualisierungen der Lokalisierungsunterstützung in C ++ 0x?
Je mehr ich mit C ++ - Gebietsschemafacetten arbeite, desto mehr verstehe ich - sie sind kaputt.
std::time_get
- ist nicht symmetrisch mitstd::time_put
(wie in C strftime / strptime) und erlaubt nicht das einfache Parsen von Zeiten mit AM / PM-Markierungen.I entdeckt In letzter Zeit kann diese einfache Zahlenformatierung unter bestimmten Gebietsschemata (wieru_RU.UTF-8
).std::ctype
ist sehr simpel, wenn man annimmt, dass das Umstellen von Groß- und Kleinschreibung auf Zeichenbasis erfolgen kann (die Konvertierung in Groß- und Kleinschreibung kann die Anzahl der Zeichen ändern und ist kontextabhängig).std::collate
- unterstützt nicht die Sortierstärke (Groß- / Kleinschreibung beachten oder nicht beachten).Es gibt keine Möglichkeit, eine andere Zeitzone als die globale Zeitzone in der Zeitformatierung anzugeben.Und vieles mehr...
Weiß jemand, ob Änderungen an Standardfacetten in C ++ 0x erwartet werden?Gibt es eine Möglichkeit, eine Bedeutung solcher Änderungen zu bringen?Vielen Dank.
BEARBEITEN: Erläuterungen für den Fall, dass der Link nicht zugänglich ist:
std::numpunct
definiert Tausendertrennzeichen als Zeichen. Wenn also ein Trennzeichen in U + 2002 - eine andere Art von Raum - verwendet wird, kann es in UTF-8 nicht als einzelnes Zeichen, sondern als Folge von mehreren Bytes reproduziert werden.
In C APIstruct lconv
Definiert das Tausendertrennzeichen als Zeichenfolge und leidet nicht an diesem Problem. Wenn Sie also versuchen, Zahlen mit Trennzeichen außerhalb von ASCII mit UTF-8-Gebietsschema zu formatieren, wird ungültiges UTF-8 erzeugt.
Um diesen Fehler zu reproduzieren, schreiben Sie 1234 an std: ostream with imbuedru_RU.UTF-8
Gebietsschema
EDIT2: Ich muss zugeben, dass die POSIX C-Lokalisierungs-API viel reibungsloser funktioniert:
Es gibt eine Umkehrung von strftime - strptime (strftime macht dasselbe wiestd::time_put::put
)Keine Probleme mit der Zahlenformatierung wegen des oben erwähnten Punktes.Es ist jedoch immer noch perfekt.
EDIT3: Nach den neuesten Hinweisen zu C ++ 0x kann ich das sehenstd::time_get::get
-- ähnlich zustrptime
und das Gegenteil vonstd::time_put::put
.