2011-04-14 18 views
6

Hoy he descubierto que el comité estándar de C++ descartó el soporte de las transmisiones de Unicode en C++ 0x en la segunda revisión. Para obtener más información, vea this pregunta.No hay secuencias Unicode en C++ 0x? ¿Por qué?

Según this documento:

La justificación para dejar fuera especializaciones corriente de los dos nuevos tipos era que las corrientes de los tipos no-char no han atraído gran variedad de usos, por lo que no está claro que hay una verdadera necesidad de duplicar el número de especializaciones de esta maquinaria tan complicada.

De this entrevista con BS:

Obviamente, debemos tener flujos de Unicode y otro soporte Unicode mucho extendida en la biblioteca estándar. El comité lo sabía, pero no tenía a nadie con las habilidades y el tiempo para hacer el trabajo, así que, lamentablemente, esta es una de las muchas áreas en las que debe buscar soporte de "terceros".

No soy un experto en Unicode, y me pregunto por qué es tan difícil implementar las transmisiones Unicode. ¿Qué es tan problemático con eso?

+2

¿Has * visto * algunas de las preguntas con respecto a los conjuntos de caracteres aquí? No estoy del todo sorprendido de que no hayan encontrado a nadie con las habilidades: P –

+1

-1: Muy pobre fuente y actitud sensacionalista. – Potatoswatter

+0

@Ignacio: las preguntas SO apenas dan una medida representativa de la experiencia, o incluso la capacidad de codificación. Los expertos tienden a resolver sus propios problemas en lugar de hacer preguntas. –

Respuesta

5

El primer párrafo que mencionas te dice: no es que las transmisiones de Unicode en particular sean más difíciles que otras transmisiones, es que las iostremas en general son extremadamente complicadas. Por lo tanto, que implementa Unicode iostreams es difícil no porque sean Unicode, sino porque son iostreams.

+0

La implementación notable de flujos unicode implica implementar una gran parte de la configuración regional para esos tipos de caracteres. – AProgrammer

+2

Además, Unicode es un método abstracto para conectar caracteres con números llamados "puntos de código". Hay diferentes formas de hacer la codificación, como UTF-8 y UTF-16 (para nombrar probablemente las dos más populares). En un documento o implementación de Estándares real, no puede simplemente decir "Unicode" y salirse con la suya, debe elegir una o más codificaciones. –

+0

No hay nada nuevo para agregar fundamentalmente a iostreams. 'codecvt' fue diseñado para soportar codificaciones multibyte desde el principio, y el soporte UTF-8 ha existido desde hace mucho tiempo. No estoy seguro de lo que dice Stroustrup allí, los iostreams Unicode están vivos y bien. – Potatoswatter

3

El papel N2238 es de 2007 y no tiene relevancia. No estoy seguro de a qué se refiere Stroustrup específicamente en la entrevista, pero eso no es noticia de última hora.

N3242 §22.5 todavía requiere codecvt_utf8 y codecvt_utf16, que son todo lo que necesita para la E/S de archivos Unicode. imbue la faceta adecuada en wcout y debería estar bien para ir ... suponiendo que tenga una biblioteca compatible. Sin embargo, en la práctica, GCC y MSVC ya suministran UTF-8, y yo esperaría que cada plataforma seria de C++ mantenga la paridad entre mbstowcs y codecvt.

Puede haber confusión porque N3242 §22.5/5 dice

- Las secuencias de varios bytes se pueden escribir sólo como un archivo binario. Intentar escribir en un archivo de texto produce un comportamiento indefinido.

Esto es porque el modo de texto I/O convierte finales de línea, por lo que un byte 0x10 como media de un UTF-16 palabra de 16 bits puede ser convertido a 0x13, 0x10, corrompiendo la corriente. Esto no tiene nada que ver con un soporte deficiente ... solo asegúrese de abrir el archivo en modo binario, como debe hacerlo con cualquier biblioteca que proporcione dicha funcionalidad.

+0

Pero con 'codecvt_utf16' no puede guardar el archivo como Unicode. Entonces no es una solución completa. – UmmaGumma

+0

@Ashot: ¿De qué estás hablando? Existe para guardar archivos en formato UTF-16. ¿Qué más haría? – Potatoswatter

+0

Todavía no lo entiendo. ¿Cómo puedo escribir algo para archivar y guardarlo en modo Unicode con 'codecvt_utf8'? Gracias – UmmaGumma

Cuestiones relacionadas