representação de bit UTF-8

4

Estou aprendendo sobre os padrões UTF-8 e é isso que estou aprendendo:

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

E eu estou querendo saber porque o código UTF-8 de 2 bytes não é 10xxxxxx , ganhando assim 1 bit até 22 bits com um código UTF-8 de 4 bytes? Do jeito que está agora, 64 valores possíveis são perdidos (de 1000000 para 10111111 ). Eu não estou tentando discutir os padrões, mas estou me perguntando por que isso acontece?

** EDITAR **

Mesmo, por que não é

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

...?

Obrigado!

    
por Yanick Rochon 13.01.2011 / 03:36

1 resposta

8

O UTF-8 é auto-sincronizado. Algo que examina os bytes pode dizer se está no início de um caractere UTF-8 ou em meio a um.

Digamos que você tenha dois caracteres em seu esquema: 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

Se o analisador pegar no segundo octeto, ele não pode dizer que não é para ler o segundo e terceiro octetos como um caractere. Com o UTF-8, o analisador pode dizer que está no meio de um caractere e continuar até o início do próximo, enquanto emite algum estado para mencionar o símbolo corrompido.

Para a edição: se o bit superior estiver limpo, os analisadores UTF-8 sabem que estão vendo um caractere representado em um octeto. Se estiver definido, é um caractere de vários octetos.

É tudo sobre recuperação de erros e fácil classificação de octetos.

    
por 13.01.2011 / 03:54

Tags