Pourquoi Unicode? Parce qu'ASCII n'a que 127 caractères. Ceux de 128 à 255 diffèrent dans différents pays, c'est pourquoi il existe des pages de code. Alors ils ont dit : permettons d'avoir jusqu'à 1114111 caractères.
Alors comment stocker le point de code le plus élevé? Vous devrez le stocker en utilisant 21 bits, donc vous utiliserez un DWORD ayant 32 bits avec 11 bits gaspillés. Donc si vous utilisez un DWORD pour stocker un caractère Unicode, c'est la manière la plus simple, car la valeur dans votre DWORD correspond exactement au point de code.
Mais les tableaux de DWORD sont bien sûr plus grands que les tableaux de WORD et bien sûr encore plus grands que les tableaux de BYTE. C'est pourquoi il n'y a pas seulement l'UTF-32, mais aussi l'UTF-16. Mais l'UTF-16 signifie un flux de WORD, et un WORD a 16 bits, donc comment le point de code le plus élevé 1114111 peut-il tenir dans un WORD? Il ne peut pas!
Alors ils ont mis tout ce qui est supérieur à 65535 dans un DWORD qu'ils appellent un couple de substitution. Un tel couple de substitution est composé de deux WORDS et peut être détecté en regardant les 6 premiers bits.
Et l'UTF-8? C'est un tableau de bytes ou un flux de bytes, mais comment le point de code le plus élevé 1114111 peut-il tenir dans un byte? Il ne peut pas! D'accord, ils ont donc également ajouté un DWORD, n'est-ce pas? Ou éventuellement un WORD, n'est-ce pas? Presque vrai!
Ils ont inventé les séquences utf-8, ce qui signifie que chaque point de code supérieur à 127 doit être encodé dans une séquence de 2 bytes, 3 bytes ou 4 bytes. Wow! Mais comment détecter de telles séquences? Eh bien, tout ce qui va jusqu'à 127 est de l'ASCII et est un seul byte. Ce qui commence par 110 est une séquence de deux bytes, ce qui commence par 1110 est une séquence de trois bytes et ce qui commence par 11110 est une séquence de quatre bytes. Les bits restants de ces prétendus "bytes de départ" appartiennent au point de code.
Maintenant, selon la séquence, des bytes suivants doivent suivre. Un byte suivant commence par 10 et les bits restants sont des bits utiles de charge et appartiennent au point de code. Concaténez les bits utiles du byte de départ et du/des bytes suivants et vous aurez le point de code. Voilà tout la magie de l'UTF-8.
153 votes
Il semble que vous avez besoin de lire Le strict minimum que tout développeur de logiciel doit absolument savoir sur Unicode et les jeux de caractères! C'est une très bonne explication de ce qui se passe.
0 votes
Introduction plus courte de mon blog. Elle a été obtenue à partir de l'article de Joel, mais appliquée à un problème spécifique.
5 votes
Cette FAQ du site web officiel d'Unicode a quelques réponses pour vous.
4 votes
@John : c'est une très belle introduction, mais ce n'est pas la source ultime : Elle saute plusieurs détails (ce qui est très bien pour une vue d'ensemble/introduction !)
0 votes
Merci @Joachim, avez-vous une meilleure source?
0 votes
@John : Malheureusement, je ne connais aucune source qui contient toutes les informations nécessaires au même endroit. Les articles Wikipedia sur Unicode/UTF-8/UTF-16 sont bien, mais ils ne mentionnent pas toutes les implications détaillées pour le développement de logiciels. J'accueillerais certainement une telle page. Mais encore une fois : pour une introduction, l'article est excellent !
6 votes
Le l'article est super, mais il comporte plusieurs erreurs et présente l'UTF-8 sous un jour quelque peu conservateur. Je suggère de lire utf8everywhere.org comme complément.
1 votes
Après avoir lu l'article, je me suis senti éclairé mais en tant que programmeur PHP, est-ce que ce passage "Lorsque j'ai découvert que l'outil populaire de développement web PHP ignore presque complètement les problèmes d'encodage des caractères, utilisant joyeusement 8 bits pour les caractères, rendant presque impossible le développement de bonnes applications web internationales, j'ai pensé, ça suffit." a un effet significatif sur mes applications?
2 votes
Jetez un coup d'œil à ce site web : utf8everywhere.org
0 votes
Un peu en retard sur ce commentaire, mais il y a un article très complet et agréable sur ce sujet par @deceze de stackoverflow ici : kunststube.net/encoding
0 votes
@Brian-Agnew - J'ai lu cet article de Joel Spolksy et j'ai découvert qu'il est PDG de Stack Overflow ! Qui aurait cru ?
0 votes
blog.hubspot.com/website/what-is-utf-8