¿Cómo funciona el trabajo UTF-8 “codificación de anchura variable”?
-
20-09-2019 - |
Pregunta
El estándar Unicode tiene suficientes puntos de código en los mismos que usted necesita 4 bytes para almacenar todos ellos. Eso es lo que hace la codificación UTF-32. Sin embargo, la codificación UTF-8 aprieta alguna manera éstos en espacios mucho más pequeños mediante el uso de algo que se llama "de ancho variable de codificación".
De hecho, se las arregla para representar los primeros 127 caracteres de US-ASCII en un solo byte, que es exactamente igual a ASCII real, para que pueda interpretar gran cantidad de texto ASCII, como si se tratara de UTF-8 sin hacer nada para ella. truco. Entonces, ¿cómo funciona?
Voy a preguntar y responder a mi propia pregunta aquí porque acabo de hacer un poco de lectura para averiguarlo y pensé que podría salvar a otra persona algún tiempo. Además tal vez alguien me puede corregir si Tengo un poco de mal.
Solución
Cada byte comienza con algunas cosas que le indican si se trata de un solo byte de código de punto, un punto de código de varios bytes, o una continuación de un punto de código de varios bytes. De esta manera:
0xxx xxxx A single-byte US-ASCII code (from the first 127 characters)
Las múltiples bytes de códigos puntos cada uno comienzan con algunas cosas que básicamente decir "eh, es necesario leer también el siguiente byte (o dos, o tres) para averiguar lo que soy." Ellos son:
110x xxxx One more byte follows
1110 xxxx Two more bytes follow
1111 0xxx Three more bytes follow
Finalmente, los bytes que siguen los códigos de inicio de todo este aspecto:
10xx xxxx A continuation of one of the multi-byte characters
Ya que se puede decir qué tipo de bytes que estás mirando desde los primeros pocos bits, a continuación, incluso si algo se ha mezclado en alguna parte, no se pierde toda la secuencia.
Otros consejos
RFC3629 - UTF-8, un formato de transformación de la norma ISO 10646 es la autoridad final aquí y tiene todas las explicaciones.
En resumen, varios bits en cada byte de la secuencia de 1-a-4-byte UTF-8-codificada que representa un solo carácter se utilizan para indicar si se trata de un byte final, un byte inicial, y si es así, cuántos bytes siguen. Los bits restantes contienen la carga útil.
UTF-8 era otro sistema para almacenar la cadena de puntos de código Unicode, esos números mágicos u +, en la memoria utilizando 8 bytes bits. En UTF-8, cada punto de código 0-127 se almacena en una de un solo byte. Sólo los puntos 128 y códigos anteriormente se almacenan usando 2, 3, de hecho, hasta 6 bytes.