Cuanto más trabajo con las facetas de configuración regional de C++, más entiendo, están rotas.¿Hay alguna actualización del soporte de localización en C++ 0x?
std::time_get
- no es simétrica constd::time_put
(como en C strftime/strptime) y no permite el análisis fácil de veces con marcas de AM/PM.- I discovered recientemente ese formato de número simple puede producir UTF-8 ilegal bajo ciertas configuraciones regionales (como
ru_RU.UTF-8
). std::ctype
es muy simplista, suponiendo que a la parte superior/inferior se puede hacer en base por carácter (la conversión de mayúsculas y minúsculas puede cambiar el número de caracteres y depende del contexto).std::collate
- no es compatible con la potencia de compaginación (mayúsculas y minúsculas o insensible).- No hay forma de especificar la zona horaria diferente de la zona horaria global en el formato de hora.
Y mucho más ...
- ¿Alguien sabe si se espera que los cambios en las facetas estándar en C++ 0x?
- ¿Hay alguna forma de resaltar la importancia de dichos cambios?
Gracias.
EDIT: aclaraciones en caso de que el enlace no es accesible:
std::numpunct
define el separador de miles como char. Por lo tanto, cuando el separador en U + 2002 - diferente tipo de espacio no puede ser reproducido como un solo carácter en UTF-8 sino como una secuencia de bytes múltiples.
En C API struct lconv
define el separador de miles como cadena y no sufre este problema. Entonces, cuando intenta formatear números con separadores fuera de ASCII con configuración regional UTF-8, se produce un UTF-8 no válido.
Para reproducir este error de escritura 1234 para std: ostream con impregnada ru_RU.UTF-8
local
Edit2: he de reconocer que POSIX C API de localización funciona mucho más suave:
- Hay inversa de strftime - - strptime (strftime hace lo mismo que
std::time_put::put
) - No hay problemas con el formato de número debido al punto que mencioné anteriormente.
Sin embargo, todavía es para ser perfeccionado.
Edit3: Según las últimas notas acerca de C++ 0x me puede ver que std::time_get::get
- similar a strptime
y enfrente de std::time_put::put
.
Parece ser que tiene suerte de que funcione la configuración estándar. Nunca he tenido éxito con MingW. – UncleBens
El único enlace en su respuesta está roto y no funciona no abierto (no es sorprendente dado que es '.no-ip.info', supongo, pero como es una parte de la pregunta, es posible que desee colocarlo en otro lugar para que sea accesible). –
Mingw no admite ninguna configuración regional aceptar C/POSIX. Sin embargo, en linux la compatibilidad con locale es muy buena. BTW C library API es mucho más limpio, mejor diseñado y generalmente funciona mucho más uniformemente. Pero ... POSIX API permite solo una configuración regional por proceso que es bastante limitada. – Artyom