Representación de bits UTF-8

4

Estoy aprendiendo sobre los estándares UTF-8 y esto es lo que estoy aprendiendo:

Definition and bytes used
UTF-8 binary representation         Meaning
0xxxxxxx                            1 byte for 1 to 7 bits chars
110xxxxx 10xxxxxx                   2 bytes for 8 to 11 bits chars
1110xxxx 10xxxxxx 10xxxxxx          3 bytes for 12 to 16 bits chars
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 4 bytes for 17 to 21 bits chars

Y me pregunto, ¿por qué el código UTF-8 de 2 bytes no es 10xxxxxx, en su lugar, ganando 1 bit hasta 22 bits con un código UTF-8 de 4 bytes? Tal como está ahora, se pierden 64 valores posibles (de 1000000a 10111111). No estoy tratando de discutir los estándares, pero me pregunto por qué es así.

** EDITAR **

Incluso, ¿por qué no es así?

UTF-8 binary representation         Meaning
0xxxxxxx                            1 byte for 1 to 7 bits chars
110xxxxx xxxxxxxx                   2 bytes for 8 to 13 bits chars
1110xxxx xxxxxxxx xxxxxxxx          3 bytes for 14 to 20 bits chars
11110xxx xxxxxxxx xxxxxxxx xxxxxxxx 4 bytes for 21 to 27 bits chars

...?

¡Gracias!

Yanick Rochon
fuente
Si cae, 10xxxxxx¿puede usar 10xxxxxx xxxxxxxx2 bytes para 8 - 14 bits?
ony

Respuestas:

8

UTF-8 se sincroniza automáticamente. Algo que examine los bytes puede decir si está al comienzo de un carácter UTF-8, o en la mitad de uno.

Digamos que tienes dos personajes en tu esquema: 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

Si el analizador recoge en el segundo octeto, no puede decir que no es para leer el segundo y el tercer octeto como un solo carácter. Con UTF-8, el analizador puede decir que está en el medio de un personaje y continuar hasta el comienzo del siguiente, mientras emite algún estado para mencionar el símbolo corrupto.

Para la edición: si el bit superior está claro, los analizadores UTF-8 saben que están mirando un personaje representado en un octeto. Si está configurado, es un carácter de varios octetos.

Se trata de recuperación de errores y clasificación fácil de octetos.

Phil P
fuente
Esta sincronización también permite atravesar caracteres en cadenas UTF-8 hacia atrás.
ony