string - caracteres - UTF8 vs. UTF16 vs. char*¿contra qué? ¡Alguien me explique este lío!
utf-8 encoding (5)
Me las he arreglado para ignorar todo este personaje de múltiples bytes, pero ahora necesito hacer un trabajo de UI y sé que mi ignorancia en esta área me va a alcanzar. ¿Alguien puede explicar en unos pocos párrafos o menos lo que necesito saber para poder localizar mis aplicaciones? Qué tipos debo usar (uso tanto .Net como C / C ++, y necesito esta respuesta para Unix y Windows).
Los diversos estándares UTF son formas de codificar "puntos de código". Un punto de código es el índice en el conjunto de caracteres Unicode.
Otra codificación es UCS2, que siempre es de 16 bits, y por lo tanto no es compatible con el rango Unicode completo.
Es bueno saber también que un punto de código no es igual a un personaje. Por ejemplo, un personaje como å puede representarse como un punto de código o como dos puntos de código uno para la a y uno para el anillo.
La comparación de dos cadenas Unicode requiere, por lo tanto, la normalización para obtener la representación canónica antes de la comparación.
También está el problema con las fuentes. Hay dos formas de manejar las fuentes. O utiliza una fuente gigantesca con glifos para todos los caracteres Unicode que necesita (creo que las versiones recientes de Windows vienen con una o dos de esas fuentes). O utiliza una biblioteca som capaz de combinar glifos de varias fuentes dedicadas a subconjuntos del estándar Unicode.
Una codificación de caracteres consiste en una secuencia de códigos que cada uno busca un símbolo de un juego de caracteres determinado. Por favor vea este buen artículo en Wikipedia sobre codificación de caracteres .
UTF8 (UCS) usa de 1 a 4 bytes para cada símbolo. Wikipedia da un buen resumen de cómo funciona el resumen de bytes múltiples:
- El bit más significativo de un carácter de un solo byte siempre es 0.
- Los bits más significativos del primer byte de una secuencia multibyte determinan la longitud de la secuencia. Estos bits más significativos son 110 para secuencias de dos bytes; 1110 para secuencias de tres bytes, y así sucesivamente.
- Los bytes restantes en una secuencia de múltiples bytes tienen 10 como sus dos bits más significativos.
- Una secuencia UTF-8 no contiene ni el byte FE ni el FF. Esto asegura que una secuencia UTF-8 nunca se vea como una secuencia UTF-16 comenzando con U + FEFF (marca de orden de bytes)
La página también muestra una gran comparación entre las ventajas y desventajas de cada tipo de codificación de caracteres.
Utiliza de 2 bytes a 4 bytes para cada símbolo.
usa 4 bytes siempre para cada símbolo.
char solo significa un byte de datos y no es una codificación real. No es análogo a UTF8 / UTF16 / ascii. Un puntero char * puede referirse a cualquier tipo de datos y cualquier codificación.
STL:
Std :: wstring y std :: stl stl no están diseñados para codificaciones de caracteres de longitud variable como UTF-8 y UTF-16.
Cómo implementar:
Eche un vistazo a la biblioteca iconv. iconv es una poderosa biblioteca de conversión de codificación de caracteres utilizada por proyectos tales como libxml (XML C analizador de Gnome)
Otros recursos geniales en la codificación de caracteres:
- Caracteres vs. Bytes de tbray.org
- Juegos de caracteres IANA
- Un tutorial de www.cs.tut.fi sobre problemas con el código
- El mínimo absoluto que todo desarrollador de software debe saber absolutamente absoluto sobre Unicode y juegos de caracteres (¡sin excusas!) (Mencionado por primera vez por @Dylan Beattie)
La sabiduría recibida sugiere que el artículo de Spolsky omite un par de puntos importantes.
Se recomienda este artículo como más completo: el estándar Unicode®: una introducción técnica
Este artículo es también una buena introducción: Conceptos básicos de Unicode
Este último en particular ofrece una visión general de las formas y esquemas de codificación de caracteres para Unicode.
Eche un vistazo a The Absolute Minimum de Joel Spolsky. Todo desarrollador de software. Absolutamente, definitivamente, debe saber sobre Unicode y juegos de caracteres (¡Sin excusas!)
EDIT 20140523 : Además, vea Caracteres, Símbolos y el Milagro Unicode de Tom Scott en YouTube: son menos de diez minutos, y una maravillosa explicación del brillante ''truco'' que es UTF-8.