unicode utf-8 utf

¿Cuántos caracteres se pueden mapear con Unicode?



utf-8 table (6)

Estoy pidiendo el recuento de todas las posibles combinaciones válidas en Unicode con explicación. Sé que un char se puede codificar como 1,2,3 o 4 bytes. Tampoco entiendo por qué los bytes de continuación tienen restricciones, aunque el byte inicial de ese carácter aclara cuánto tiempo debería durar.


Estoy pidiendo el recuento de todas las posibles combinaciones válidas en Unicode con explicación.

1,111,998 : 17 aviones × 65,536 caracteres por avión - 2048 sustitutos - 66 noncharacters

Tenga en cuenta que UTF-8 y UTF-32 podrían codificar teóricamente mucho más de 17 planos, pero el rango está restringido según las limitaciones de la codificación UTF-16 .

109,384 puntos de código se asignan realmente en Unicode 6.0 .

Tampoco entiendo por qué los bytes de continuación tienen restricciones, aunque el byte inicial de ese carácter aclara cuánto tiempo debería durar.

El propósito de esta restricción en UTF-8 es hacer que la codificación self-synchronizing .

Para un contraejemplo, considere la codificación china GB18030. Allí, la letra ß se representa como la secuencia de bytes 81 30 89 38 , que contiene la codificación de los dígitos 0 y 8 . Entonces, si tiene una función de búsqueda de cadenas no diseñada para esta peculiaridad específica de codificación, entonces una búsqueda para el dígito 8 encontrará un falso positivo dentro de la letra ß .

En UTF-8, esto no puede suceder, porque la no superposición entre los bytes principales y los bytes de ruta garantiza que la codificación de un carácter más corto nunca puede ocurrir dentro de la codificación de un carácter más largo.


Para dar una respuesta metafóricamente precisa, all of them .

Los bytes de continuación en las codificaciones UTF-8 permiten la resincronización de la secuencia de octetos codificada ante el "ruido de línea". El codificador, simplemente necesita escanear hacia adelante para un byte que no tiene un valor entre 0x80 y 0xBF para saber que el siguiente byte es el inicio de un nuevo punto de carácter.

En teoría, las codificaciones utilizadas hoy en día permiten la expresión de caracteres cuyo número de caracteres Unicode es de hasta 31 bits de longitud. En la práctica, esta codificación se implementa realmente en servicios como Twitter, donde el tweet de longitud máxima puede codificar hasta 4.340 bits de datos. (140 caracteres [válido y no válido], multiplicado por 31 bits cada uno).


Unicode admite 1,114,112 puntos de código. Hay 2048 puntos de código sustituto, lo que da 1,112,064 valores escalares. De estos, hay 66 caracteres que no son, lo que lleva a 1,111,998 posibles caracteres codificados (a menos que haya cometido un error de cálculo).


Unicode no es una codificación, es un mapeo de caracteres. Según Wikipedia, Unicode actualmente contiene 109242 caracteres distintos.


Unicode permite 17 planes , cada uno de 65,536 caracteres posibles (o ''puntos de código''). Esto da un total de 1,114,112 caracteres posibles. En la actualidad, solo se ha asignado aproximadamente el 10% de este espacio.

Los detalles precisos de cómo se codifican estos puntos de código difieren con la codificación, pero su pregunta lo hace sonar como si estuviera pensando en UTF-8. La razón de las restricciones en los bytes de continuación es, presumiblemente, por lo que es fácil encontrar el comienzo del siguiente carácter (ya que los caracteres de continuación siempre tienen el formato 10xxxxxx, pero el byte inicial nunca puede ser de esta forma).


Unicode tiene la cantidad hexadecimal de 110000, que es 1114112