Le standard Unicode contient suffisamment de points de code pour que vous ayez besoin de 4 octets pour tous les stocker. C'est ce que fait l'encodage UTF-32. Pourtant, l'encodage UTF-8 les comprime d'une manière ou d'une autre dans des espaces beaucoup plus petits en utilisant quelque chose appelé «encodage à largeur variable».
En fait, il parvient à représenter les 127 premiers caractères de l'US-ASCII en un seul octet qui ressemble exactement au vrai ASCII, vous pouvez donc interpréter beaucoup de texte ascii comme s'il s'agissait de UTF-8 sans rien y faire. Astuce. Alors, comment ça marche?
Je vais poser et répondre à ma propre question ici parce que j'ai juste fait un peu de lecture pour comprendre et j'ai pensé que cela pourrait faire gagner du temps à quelqu'un d'autre. De plus, peut-être que quelqu'un peut me corriger si je me trompe.
la source
Réponses:
Chaque octet commence par quelques bits qui vous indiquent s'il s'agit d'un point de code à un octet, d'un point de code à plusieurs octets ou à la continuation d'un point de code à plusieurs octets. Comme ça:
Les points de code multi-octets commencent chacun par quelques bits qui disent essentiellement "hé, vous devez également lire l'octet suivant (ou deux, ou trois) pour comprendre ce que je suis." Elles sont:
Enfin, les octets qui suivent ces codes de démarrage ressemblent tous à ceci:
Puisque vous pouvez dire quel type d'octet vous regardez à partir des premiers bits, alors même si quelque chose est mutilé quelque part, vous ne perdez pas toute la séquence.
la source
next char is continuation
? Si nous avons un caractère de 3 octets, ce serait comme:,1xxxxxxx 1xxxxxxx 0xxxxxxx
donc moins d'espace serait gaspillé.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 1 à 4 octets codée en UTF-8 représentant un seul caractère sont utilisés pour indiquer s'il s'agit d'un octet de fin, d'un octet de début et, si oui, combien d'octets suivent. Les bits restants contiennent la charge utile.
la source
Extrait du minimum absolu que chaque développeur de logiciel doit absolument et positivement savoir sur l'Unicode et les jeux de caractères (sans excuses!)
la source