Comment UTF-8 travail « encoding largeur variable »?
-
20-09-2019 - |
Question
La norme unicode a suffisamment de code points dans ce que vous avez besoin de 4 octets pour les stocker. C'est ce que l'encodage UTF-32. Pourtant, l'encodage UTF-8 en quelque sorte ceux-ci en serre des espaces beaucoup plus petits en utilisant ce qu'on appelle « le codage de largeur variable ».
En fait, il parvient à représenter les 127 premiers caractères de US-ASCII dans un seul octet qui ressemble exactement ASCII réel, de sorte que vous pouvez interpréter beaucoup de texte ascii comme si elle était UTF-8 sans faire quoi que ce soit. Astuce. Alors, comment ça marche?
Je vais poser et répondre à ma propre question ici parce que je viens de faire un peu de lecture pour le comprendre et je pensais qu'il pourrait sauver quelqu'un d'autre un certain temps. De plus peut-être que quelqu'un peut me corriger si j'ai un peu de mal.
La solution
Chaque octet commence par quelques bits qui vous indiquent que ce soit un seul octet code virgule, un point de code multi-octets, ou une continuation d'un point de code multi-octets. Comme ceci:
0xxx xxxx A single-byte US-ASCII code (from the first 127 characters)
Les multi-octets de code-points chacun commence par quelques bits essentiellement dire « hey, vous devez lire aussi l'octet suivant (ou deux, ou trois) pour savoir ce que je suis. » Ils sont:
110x xxxx One more byte follows
1110 xxxx Two more bytes follow
1111 0xxx Three more bytes follow
Enfin, les octets qui suivent les codes de départ regardent tous comme ceci:
10xx xxxx A continuation of one of the multi-byte characters
Comme vous pouvez dire quel genre d'octets que vous regardez des premiers morceaux, alors même si quelque chose est mutilée quelque part, vous ne perdez pas la séquence.
Autres conseils
RFC3629 - UTF-8, un format de transformation ISO 10646 est l'autorité finale ici et a toutes les explications.
En bref, plusieurs bits dans chaque octet de la séquence de codage UTF-8-encoded 1 à 4 octets représentant un caractère unique sont utilisés pour indiquer que ce soit un octet de fin, un octet de tête, et dans l'affirmative, combien octets suivent. Les bits restants contiennent la charge utile.
UTF-8 est un autre système de stockage votre chaîne de points de code Unicode, ces numéros magiques U +, en mémoire à l'aide de 8 octets de bits. En UTF-8, tous les point de code 0-127 est stocké dans un seul octet. Seuls les points de code 128 et ci-dessus sont stockés en utilisant 2, 3, en fait, jusqu'à 6 octets.