Czy są jakieś aktualizacje obsługi lokalizacji w C ++ 0x?
Im więcej pracuję z aspektami ustawień regionalnych C ++, tym lepiej rozumiem --- są one zepsute.
std::time_get
- nie jest symetryczny zstd::time_put
(jak w C strftime / strptime) i nie pozwala na łatwe analizowanie czasów za pomocą znaków AM / PM.I odkryty ostatnio, że proste formatowanie liczb może powodować niedozwolone UTF-8 w pewnych lokalizacjach (npru_RU.UTF-8
).std::ctype
jest bardzo uproszczone zakładając, że do góry / do dołu można wykonać na podstawie na znak (konwersja przypadku może zmienić liczbę znaków i jest zależna od kontekstu).std::collate
- nie obsługuje siły sortowania (wielkość liter lub wielkość liter są niewrażliwe).Nie ma możliwości określenia strefy czasowej innej niż globalna strefa czasowa w formatowaniu czasu.I wiele więcej...
Czy ktoś wie, czy oczekuje się zmian w standardowych aspektach w C ++ 0x?Czy jest jakiś sposób, aby nadać znaczenie takim zmianom?Dzięki.
EDYTOWAĆ: Wyjaśnienia w przypadku, gdy link nie jest dostępny:
std::numpunct
definiuje separator tysięcy jako znak. Więc kiedy separator w U + 2002 - inny rodzaj przestrzeni, nie może być odtworzony jako pojedynczy znak w UTF-8, ale jako sekwencja wielu bajtów.
W C APIstruct lconv
definiuje separator tysięcy jako ciąg znaków i nie cierpi na ten problem. Tak więc, gdy próbujesz sformatować liczby z separatorami poza ASCII z ustawieniami UTF-8, powstaje niepoprawny UTF-8.
Aby odtworzyć ten błąd, napisz 1234 do std: ostream z nasyconymru_RU.UTF-8
widownia
EDIT2: Muszę przyznać, że API lokalizacji POSIX C działa znacznie płynniej:
Istnieje odwrotność strftime - strptime (strftime robi to samo costd::time_put::put
)Brak problemów z formatowaniem numerów z powodu wspomnianego powyżej punktu.Jednak nadal nie można być perfecetem.
EDIT3: Według najnowszych notatek na temat C ++ 0x widzę tostd::time_get::get
-- podobny dostrptime
i naprzeciwkostd::time_put::put
.