Pregunta

Me las arreglé para ignorar todo este material de caracteres de múltiples bytes, pero ahora necesito hacer un trabajo de UI y sé que mi ignorancia en esta área me alcanzará. ¿Puede alguien explicar en unos pocos párrafos o menos solo 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)?

¿Fue útil?

Solución

Vea de Joel Spolsky. El mínimo absoluto que todo desarrollador de software debe conocer absolutamente, positivamente sobre Unicode. y juegos de caracteres (¡sin excusas!)

EDIT 20140523 : También, vea Caracteres, símbolos y El milagro de Unicode de Tom Scott en YouTube: son menos de diez minutos y una maravillosa explicación del brillante 'pirateo' que es UTF-8

Otros consejos

Una codificación de caracteres consiste en una secuencia de códigos en los que cada uno busca un símbolo de un conjunto de caracteres determinado. Consulte este buen artículo en Wikipedia sobre codificación de caracteres .

UTF8 (UCS) utiliza de 1 a 4 bytes para cada símbolo Wikipedia ofrece un buen resumen de cómo funciona el resumen de varios bytes:

  
      
  • El bit más significativo de un carácter de un solo byte es siempre 0.
  •   
  • Los bits más significativos del primer byte de una secuencia de múltiples bytes.   Determinar 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 más   bits significativos.
  •   
  • Un flujo UTF-8 no contiene el byte FE ni FF. Esto asegura que un   La transmisión UTF-8 nunca se parece a una UTF-16   transmisión 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.

UTF16 (UCS2)

Utiliza de 2 bytes a 4 bytes para cada símbolo.

UTF32 (UCS4)

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 hacer referencia a cualquier tipo de datos y cualquier codificación.

STL:

Ambos stl's std :: wstring y std :: string no están diseñados para Codificaciones de caracteres de longitud variable como UTF-8 y UTF-16.

Cómo implementar:

Echa un vistazo a la biblioteca iconv. iconv es una potente biblioteca de conversión de codificación de caracteres utilizada por proyectos como libxml (analizador XML C de Gnome)

Otros excelentes recursos sobre codificación de caracteres:

Sabiduría recibida sugiere que el artículo de Spolsky se pierde Un par de puntos importantes.

Este artículo se recomienda como más completo: El estándar Unicode®: una introducción técnica

Este artículo también es una buena introducción: Lo básico de Unicode

Este último en particular ofrece una descripción general de las formas y esquemas de codificación de caracteres para Unicode.

Los distintos estándares de UTF son formas de codificar los 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 completo de Unicode.

También es bueno saber que un punto de código no es igual a un carácter. Por ejemplo, un carácter 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 por lo tanto requiere 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 fuentes de este tipo). O utiliza una biblioteca som capaz de combinar glifos de varias fuentes dedicadas a subconjuntos del estándar Unicode.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top