Je mehr ich mit C++ - Locale-Facetten arbeite, desto mehr verstehe ich - sie sind gebrochen.Gibt es Updates der Lokalisierungsunterstützung in C++ 0x?
std::time_get
- nicht mitstd::time_put
(wie es in C strftime/strptime) symmetrisch und erlaubt kein einfaches Parsing Mal mit AM/PM Mark.- I discovered Kürzlich kann diese einfache Zahlenformatierung unter bestimmten Gebietsschemata illegales UTF-8 erzeugen (wie
ru_RU.UTF-8
). std::ctype
ist sehr vereinfachend unter der Annahme, dass nach oben/nach unten kann auf der Basis pro Zeichen erfolgen (Fall Konvertierung kann die Anzahl der Zeichen ändern und es ist abhängig von Kontext).std::collate
- unterstützt keine Sortierungsstärke (Groß-/Kleinschreibung oder Insensitivität).- Es gibt keine Möglichkeit, die Zeitzone anders als die globale Zeitzone in der Zeitformatierung anzugeben.
Und vieles mehr ...
- Hat jemand weiß, ob Änderungen in Standard Facetten in C++ 0x erwartet werden?
- Gibt es eine Möglichkeit, eine Bedeutung solcher Änderungen zu bringen?
Danke.
EDIT: Clarifications, falls die Verbindung nicht zugänglich ist:
std::numpunct
definiert Tausendertrennzeichen als char. Also, wenn Trennzeichen in U + 2002 - andere Art von Raum kann nicht als einzelnes Zeichen in UTF-8 aber als mehrere Byte-Sequenz reproduziert werden.
In C API struct lconv
definiert Tausende Trennzeichen als Zeichenfolge und leidet nicht unter diesem Problem. Wenn Sie also versuchen, Zahlen mit Trennzeichen außerhalb von ASCII mit UTF-8-Gebietsschema zu formatieren, wird ungültiges UTF-8 erstellt.
um diesen Fehler zu schreiben 1234 std reproduzieren: Ostream mit tränkt ru_RU.UTF-8
locale
EDIT2: ich, dass POSIX C Lokalisierung API arbeitet viel glatter muss zugeben:
- Es gibt Inverse von strftime - - strptime (strftime tut das gleiche wie)
- Keine Probleme mit der Formatierung von Zahlen wegen der oben genannten Punkt.
Allerdings ist es immer noch für perfecet.
EDIT3: Nach den neuesten Hinweise zu C++ 0x kann ich sehen, dass std::time_get::get
- ähnlich wie strptime
und gegenüber std::time_put::put
.
Sie scheinen glücklich zu sein, die std :: locale funktioniert überhaupt. Ich hatte noch nie einen Erfolg mit MingW. – UncleBens
Der einzige Link in Ihrer Antwort ist gebrochen und tut nicht offen (nicht überraschend, da es '.no-ip.info' ist, denke ich, aber da es ein Teil der Frage ist, möchtest du es vielleicht woanders hinstellen, damit es zugänglich ist.) –
Mingw unterstützt kein Gebietsschema akzeptiert C/POSIX, aber unter Linux Locale Unterstützung ist sehr gut. BTW C-Bibliothek API viel sauberer, besser gestaltet und in der Regel funktioniert viel reibungsloser. Aber ... POSIX API erlaubt nur ein Gebietsschema pro Prozess, der ziemlich einschränkend ist. – Artyom