Qu'est-ce qu'un encodage de caractères
Un encodage est un accord : « le nombre 65 signifie la lettre A ». Quand tu écris un texte, le programme enregistre ces nombres ; quand une autre personne l'ouvre, son programme les retraduit en lettres avec le même accord. Si les deux n'utilisent pas la même table, le texte s'affiche mal.
Il faut distinguer deux idées. La première est le jeu de caractères, la liste de quels nombres correspondent à quels symboles. La seconde est la façon dont ces nombres sont stockés en octets. En ASCII, les deux coïncident de façon triviale ; en Unicode, non, et c'est là qu'intervient l'UTF-8.
ASCII : 128 caractères sur 7 bits
L'ASCII (sigle de American Standard Code for Information Interchange) a été normalisé dans les années 1960. Il utilise 7 bits, soit 2 puissance 7 = 128 codes, de 0 à 127. Parmi eux, 33 sont des caractères de contrôle (de 0 à 31 et le 127) et 95 sont imprimables (de 32 à 126, espace compris).
Il ne comprend ni lettres accentuées, ni le ñ, ni le symbole de l'euro : il a été conçu pour l'anglais. Cela explique pourquoi d'autres tables ont ensuite été nécessaires.
| Caractère de contrôle | Décimal | Hexadécimal | Binaire (7 bits) | À quoi il sert |
|---|---|---|---|---|
| Nul (NUL) | 0 | 00 | 0000000 | Marque la fin d'une chaîne dans plusieurs langages |
| Tabulation horizontale (TAB) | 9 | 09 | 0001001 | Saute à la tabulation suivante |
| Saut de ligne (LF) | 10 | 0A | 0001010 | Passe à la ligne suivante |
| Retour chariot (CR) | 13 | 0D | 0001101 | Revient au début de la ligne |
| Échappement (ESC) | 27 | 1B | 0011011 | Démarre des séquences de contrôle |
| Espace | 32 | 20 | 0100000 | Premier caractère imprimable |
| Supprimer (DEL) | 127 | 7F | 1111111 | Efface le caractère |
Relations à retenir
La table n'est pas ordonnée au hasard. Avec quelques régularités, tu peux lire des codes de tête.
- Les chiffres de « 0 » à « 9 » occupent les codes de 48 à 57 (30 à 39 en hexadécimal). La valeur d'un chiffre est son code moins 48 : le « 7 » est 55, et 55 − 48 = 7.
- Les majuscules vont de 65 (« A ») à 90 (« Z ») et les minuscules de 97 (« a ») à 122 (« z »).
- La différence entre une majuscule et sa minuscule est toujours de 32 : « A » = 65 et « a » = 97 ; « C » = 67 et « c » = 99. En binaire, un seul bit change : 01000001 pour « A » et 01100001 pour « a ».
- Pour savoir quelle place une majuscule occupe dans l'alphabet, retire 64 : « C » vaut 67 et 67 − 64 = 3, la troisième lettre.
- Comme toutes les majuscules (65 à 90) ont des codes inférieurs à ceux des minuscules (97 à 122), un tri alphabétique « par code » place « Zebra » avant « apple ». Beaucoup de programmes ont besoin d'une option de comparaison à part pour trier correctement.
Fin de ligne : LF, CR et CRLF
Un saut de ligne semble simple, mais il s'écrit différemment selon le système. Unix, Linux et macOS utilisent un seul caractère, LF (10). Windows en utilise deux à la suite, CR et LF (13 et 10), appelés CRLF. Les anciens téléscripteurs avaient besoin de deux ordres distincts : ramener le chariot au début et faire avancer le papier d'une ligne.
Cette différence est la cause de fichiers qui s'affichent sur une seule ligne dans un éditeur basique, ou avec un symbole étrange à la fin de chaque ligne. Si tu cherches le code de chacun, écris LF ou CR dans le champ de recherche de la table ASCII.
L'« ASCII étendu » n'est pas un standard
Comme un octet compte 8 bits et que l'ASCII n'en utilise que 7, il restait 128 codes libres (de 128 à 255) et chaque fabricant et chaque région les a remplis à sa façon. On appelle cela l'« ASCII étendu », mais il n'existe pas une table unique : il y en a beaucoup, appelées pages de codes. Deux des plus connues sont Latin-1 (ISO-8859-1), où le é est le code 233, et Windows-1252, similaire mais avec des différences dans les codes 128 à 159 (c'est là que se trouve, par exemple, l'euro).
Le problème, c'est que le code 233 signifie « é » dans une table et autre chose dans une autre. Un texte écrit avec une table et lu avec une autre affichait n'importe quoi. Unicode est né pour mettre fin à ce désordre.
Unicode et UTF-8
Unicode attribue un numéro unique, appelé point de code, à chaque caractère de presque tous les systèmes d'écriture du monde, plus des symboles et des émojis. Il compte aujourd'hui plus de 150 000 caractères. On l'écrit avec le préfixe U+ et en hexadécimal : le « A » est U+0041, le « ñ » est U+00F1, l'euro est U+20AC et l'émoji du visage souriant est U+1F600. Les 128 premiers points de code sont exactement ceux de l'ASCII.
L'UTF-8 est la manière la plus utilisée de stocker ces nombres en octets, et il en utilise de 1 à 4 selon le caractère. Les 128 de l'ASCII occupent un seul octet identique à celui d'avant, donc un texte ASCII est aussi un texte UTF-8 valide. Le reste occupe plus d'octets.
| Caractère | Point de code | Octets en UTF-8 | Octets (hexadécimal) |
|---|---|---|---|
| A | U+0041 | 1 | 41 |
| é | U+00E9 | 2 | C3 A9 |
| ñ | U+00F1 | 2 | C3 B1 |
| € | U+20AC | 3 | E2 82 AC |
| 😀 | U+1F600 | 4 | F0 9F 98 80 |
Pourquoi « é » apparaît à la place de « é »
C'est l'erreur la plus courante et elle a une explication exacte. Le é en UTF-8 fait deux octets : C3 et A9. Si un programme croit que le texte est en Latin-1, il lit chaque octet comme un caractère : le C3 est « à » et le A9 est « © ». Résultat : « é ». Il se passe la même chose avec « è », qui s'affiche « è », et avec « café », qui apparaît comme « café ».
La solution consiste presque toujours à indiquer au programme d'ouvrir le fichier en UTF-8 (dans un éditeur de texte ou dans les paramètres d'importation d'un tableur). Quand c'est l'inverse, un texte en Latin-1 lu comme de l'UTF-8, on voit souvent apparaître des losanges avec un point d'interrogation, car ces octets isolés ne forment pas de séquences UTF-8 valides.
Comment utiliser la table ASCII et le convertisseur
L'outil « Table ASCII » affiche les 128 caractères avec leur code en décimal, hexadécimal, octal et binaire, et le nom de ceux de contrôle.
- Écris dans le champ de recherche un caractère, un code ou le nom d'un caractère de contrôle (par exemple A, 65, 41 ou LF) pour trouver sa ligne.
- Utilise les boutons de filtre (Contrôle, Chiffres, Majuscules, Minuscules, Signes) pour n'afficher qu'un groupe.
- Pour convertir, écris un texte dans « Texte » et choisis le format (décimal, hexadécimal, octal ou binaire) : les codes apparaissent en dessous. « Hola » donne 72 111 108 97 en décimal et 48 6F 6C 61 en hexadécimal.
- Tu peux aussi faire l'inverse : colle des codes séparés par des espaces ou des virgules dans « Codes » et le texte se construit. En hexadécimal, les préfixes comme 0x41 sont acceptés.
Si le texte contient des caractères qui ne sont pas ASCII, comme le ñ, l'outil le signale et affiche leur code Unicode. Pour voir les octets réels en UTF-8, utilise « Texte en binaire » : le ñ donne 11000011 10110001, deux octets de 8 bits. Les limites : la table n'affiche que l'ASCII standard, pas l'étendu, et tout est calculé dans ton navigateur sans envoyer le texte à un serveur.
Questions fréquentes
Combien de caractères l'ASCII compte-t-il ?
128, avec des codes de 0 à 127 et 7 bits chacun. Parmi eux, 33 sont de contrôle et 95 sont imprimables, espace compris.
Quel est le code ASCII de la lettre A et de la lettre a ?
Le « A » est 65 (41 en hexadécimal, 01000001 en binaire) et le « a » est 97 (61 en hexadécimal, 01100001 en binaire). Ils diffèrent toujours de 32.
Quelle est la différence entre ASCII et Unicode ?
L'ASCII compte 128 caractères pensés pour l'anglais. Unicode en compte plus de 150 000, de presque toutes les langues et des émojis, et ses 128 premiers sont les mêmes que ceux de l'ASCII.
Qu'est-ce que l'UTF-8 ?
C'est la manière la plus utilisée de stocker du texte Unicode en octets. Il utilise de 1 à 4 octets par caractère : ceux de l'ASCII en occupent un, un é en occupe deux et un émoji quatre.
Pourquoi mon texte affiche-t-il « é » ou « è » ?
Parce qu'un texte enregistré en UTF-8 est lu comme du Latin-1. Ouvre le fichier en indiquant l'encodage UTF-8 et le problème est réglé.