Informatique
Codes Unicode, UTF-8 et UTF-16 d'un texte
Colle un texte et vois chaque caractère avec son point de code, ses octets en UTF-8 et UTF-16 et son code HTML. Ou saisis les codes, comme U+1F600 ou é, et obtiens les caractères.
Caractères, points de code et octets
Unicode attribue à chaque caractère de chaque écriture un numéro, le point de code, noté U+ suivi de chiffres hexadécimaux : A est U+0041, é U+00E9, l'euro U+20AC, le visage souriant U+1F600. Il y a plus d'un million de positions, dont environ 150 000 utilisées.
Le point de code doit ensuite devenir des octets. UTF-8, l'encodage du web, utilise un à quatre octets : un pour l'ASCII, deux pour les lettres accentuées, trois pour presque tout le reste, quatre pour les emoji et les symboles rares. UTF-16, utilisé par JavaScript, Java et Windows, utilise deux octets ou une paire de substitution de quatre.
C'est pourquoi la longueur d'une chaîne dépend de ce qu'on compte : "😀".length vaut 2 en JavaScript, le caractère occupe 4 octets en UTF-8 et à l'œil il n'y en a qu'un. Et une lettre accentuée peut être un seul point de code ou une lettre suivie d'un accent combinant : identiques à l'œil, différentes pour la machine.
Erreurs fréquentes
- Couper une chaîne UTF-8 à un nombre fixe d'octets : on risque de couper un caractère en deux.
- Compter les caractères avec .length en JavaScript : les emoji et les caractères hors du plan de base comptent double.
- Comparer des textes sans les normaliser : un é précomposé et un e suivi d'un accent combinant diffèrent pour l'ordinateur.
Questions fréquentes
Quelle différence entre Unicode et UTF-8 ?
Unicode est la liste des caractères avec leur numéro ; UTF-8 est une manière d'écrire ces numéros en octets. Le même texte Unicode peut être enregistré en UTF-8, UTF-16 ou UTF-32.
Pourquoi vois-je des caractères bizarres comme é au lieu de é ?
Parce qu'un texte en UTF-8 est lu comme du Latin-1 : les deux octets de é, C3 A9, deviennent deux caractères distincts. Il suffit de déclarer le bon encodage.
Comment écrire un caractère Unicode en HTML ?
Avec une entité numérique : é en décimal ou é en hexadécimal. Si la page est en UTF-8, tu peux aussi saisir le caractère directement.
Comment fonctionne ce calcul
UTF-8 : jusqu'à U+007F un octet 0xxxxxxx ; jusqu'à U+07FF deux octets 110xxxxx 10xxxxxx ; jusqu'à U+FFFF trois octets 1110xxxx 10xxxxxx 10xxxxxx ; au-delà, quatre octets 11110xxx et trois de continuation. UTF-16 : jusqu'à U+FFFF une unité de 16 bits ; au-delà, on soustrait 0x10000 et les 20 bits se répartissent en deux substituts, 0xD800 + les 10 bits hauts et 0xDC00 + les 10 bas.
Calculs liés
Virgule flottante IEEE 754
Comment un décimal est stocké en float 32 ou 64 bits : signe, exposant, mantisse et erreur.
Convertisseur Base64
Du texte, d'un entier, de l'hexadécimal ou du binaire vers Base64 et retour, groupes de 6 bits expliqués.
Unités de stockage et téléchargement
Des octets aux gigaoctets et gibioctets, et le temps pour télécharger un fichier à une vitesse donnée.
Convertisseur de couleurs
Du HEX au RVB, TSL, TSV et CMJN et retour, avec le contraste WCAG du texte blanc et noir.