Partie 5 : Représentation des textes en machine
1. Du texte aux nombres
Section intitulée « 1. Du texte aux nombres »Un ordinateur ne sait manipuler que des nombres binaires. Pour stocker du texte, il faut donc associer un nombre unique à chaque caractère (lettre, chiffre, ponctuation, espace, etc.). Cette association s'appelle un encodage (ou encoding en anglais).
Un encodage est un tableau de correspondance : à chaque caractère est attribué un numéro, appelé point de code.
2. Le code ASCII (1963)
Section intitulée « 2. Le code ASCII (1963) »2.1 Principe
Section intitulée « 2.1 Principe »L'ASCII (American Standard Code for Information Interchange) est le premier encodage standardisé, créé en 1963 aux États-Unis.
Caractéristiques :
- Chaque caractère est codé sur 7 bits ;
- Cela permet 2⁷ = 128 caractères différents (de 0 à 127) ;
- Il couvre les lettres de l'alphabet latin non accentuées (a-z, A-Z), les chiffres (0-9), les signes de ponctuation et des caractères de contrôle (retour à la ligne, tabulation, etc.).
2.2 Extrait de la table ASCII
Section intitulée « 2.2 Extrait de la table ASCII »| Code | Caractère | Code | Caractère | Code | Caractère | ||
|---|---|---|---|---|---|---|---|
| 32 | (espace) | 48 | 0 | 65 | A | ||
| 33 | ! | 49 | 1 | 66 | B | ||
| 34 | " | 50 | 2 | 67 | C | ||
| 42 | * | 57 | 9 | 90 | Z | ||
| 43 | + | 58 | : | 97 | a | ||
| 44 | , | 59 | ; | 98 | b | ||
| 45 | - | 60 | < | 99 | c | ||
| 46 | . | 61 | = | 122 | z | ||
| 47 | / | 63 | ? | 123 | { |
2.3 Limites de l'ASCII
Section intitulée « 2.3 Limites de l'ASCII »L'ASCII a été conçu pour l'anglais. Il ne contient aucun caractère accentué (é, è, ê, à, ù, ç...) ni aucun caractère d'autres alphabets (chinois, arabe, grec, cyrillique...).
Avec seulement 128 caractères, il est très insuffisant pour représenter les textes de la plupart des langues du monde.
3. ISO-8859-1, dit « Latin-1 » (1986)
Section intitulée « 3. ISO-8859-1, dit « Latin-1 » (1986) »3.1 Principe
Section intitulée « 3.1 Principe »Pour résoudre le problème des caractères accentués des langues d'Europe occidentale, la norme ISO-8859-1 (aussi appelée Latin-1) a été créée en 1986.
Caractéristiques :
- Chaque caractère est codé sur 8 bits (1 octet) ;
- Cela permet 2⁸ = 256 caractères différents (de 0 à 255) ;
- Les 128 premiers codes (0 à 127) sont identiques à l'ASCII : Latin-1 est compatible avec ASCII ;
- Les codes 128 à 255 ajoutent les caractères accentués et spéciaux des langues d'Europe de l'Ouest : é, è, ê, ë, à, ù, ç, ñ, ü, ö, ß, £, etc.
3.2 Exemples de codes Latin-1
Section intitulée « 3.2 Exemples de codes Latin-1 »| Code | Caractère | Code | Caractère | |
|---|---|---|---|---|
| 192 | À | 233 | é | |
| 199 | Ç | 234 | ê | |
| 200 | È | 235 | ë | |
| 201 | É | 238 | î | |
| 224 | à | 244 | ô | |
| 226 | â | 249 | ù | |
| 231 | ç | 252 | ü | |
| 232 | è | 255 | ÿ |
3.3 Limites de l'ISO-8859-1
Section intitulée « 3.3 Limites de l'ISO-8859-1 »Avec 256 caractères, Latin-1 couvre le français, l'espagnol, l'allemand, le portugais, etc. Mais il ne couvre pas :
- Les caractères du polonais, du tchèque, du hongrois (qui ont leurs propres variantes ISO-8859-2, ISO-8859-3, etc.) ;
- Les alphabets non latins : grec, cyrillique, arabe, hébreu ;
- Les idéogrammes chinois, japonais, coréens ;
- Les emojis.
Résultat : chaque région du monde avait son propre encodage, et les textes échangés entre pays étaient souvent illisibles (caractères remplacés par des symboles bizarres).
4. Unicode et UTF-8 (1991)
Section intitulée « 4. Unicode et UTF-8 (1991) »4.1 Unicode : un catalogue universel
Section intitulée « 4.1 Unicode : un catalogue universel »Unicode a été créé en 1991 pour résoudre définitivement le problème : il attribue un numéro unique (appelé point de code) à chaque caractère de chaque langue du monde.
Quelques chiffres :
- La version actuelle d'Unicode définit plus de 150 000 caractères ;
- Il couvre 161 écritures différentes (latin, grec, cyrillique, arabe, chinois, japonais, etc.) ;
- Il inclut aussi les symboles mathématiques, les emojis, les caractères historiques, etc.
Les points de code Unicode sont notés U+ suivi du code en hexadécimal :
| Point de code | Caractère | Description |
|---|---|---|
| U+0041 | A | Lettre A majuscule |
| U+00E9 | é | Lettre e accent aigu |
| U+03B1 | α | Lettre alpha grecque |
| U+4E2D | 中 | Caractère chinois « milieu » |
| U+1F600 | 😀 | Emoji visage souriant |
4.2 UTF-8 : l'encodage dominant
Section intitulée « 4.2 UTF-8 : l'encodage dominant »UTF-8 (Unicode Transformation Format - 8 bits) est l'encodage le plus utilisé dans le monde (plus de 98 % des pages Web). Son principe est astucieux : le nombre d'octets utilisés varie selon le caractère :
| Plage de codes | Nombre d'octets | Exemples |
|---|---|---|
| U+0000 à U+007F | 1 octet | Caractères ASCII (a-z, A-Z, 0-9, ponctuation) |
| U+0080 à U+07FF | 2 octets | Caractères accentués (é, è, ê, ñ, ü...) |
| U+0800 à U+FFFF | 3 octets | Idéogrammes chinois, japonais, coréens |
| U+10000 à U+10FFFF | 4 octets | Emojis, caractères rares |
4.3 Autres encodages Unicode
Section intitulée « 4.3 Autres encodages Unicode »Il existe d'autres formats de stockage pour Unicode :
| Encodage | Taille par caractère | Usage |
|---|---|---|
| UTF-8 | 1 à 4 octets (variable) | Web, fichiers texte, Linux, macOS |
| UTF-16 | 2 ou 4 octets | Windows (interne), Java, JavaScript |
| UTF-32 | 4 octets (fixe) | Rare, traitement interne |
5. Les problèmes d'encodage
Section intitulée « 5. Les problèmes d'encodage »5.1 Les « caractères bizarres »
Section intitulée « 5.1 Les « caractères bizarres » »Quand un texte est enregistré dans un encodage et lu dans un autre, les caractères accentués sont remplacés par des séquences étranges :
| Texte original | Encodage d'écriture | Encodage de lecture | Résultat affiché |
|---|---|---|---|
| « Éducation » | UTF-8 | Latin-1 | « Éducation » |
| « Éducation » | Latin-1 | UTF-8 | « erreur ou ? » |
Ces problèmes sont la cause de nombreux affichages cassés sur les sites Web, dans les emails ou dans les fichiers CSV.
5.2 Comment les éviter ?
Section intitulée « 5.2 Comment les éviter ? »- Toujours utiliser UTF-8 dans les nouveaux projets ;
- Préciser l'encodage dans les fichiers HTML :
<meta charset="utf-8">; - En Python, préciser l'encodage à l'ouverture d'un fichier.
6. En Python
Section intitulée « 6. En Python »6.1 Les fonctions ord() et chr()
Section intitulée « 6.1 Les fonctions ord() et chr() »Python fournit deux fonctions pour passer d'un caractère à son code et inversement :
>>> ord('A') # code du caractère 'A'65
>>> ord('é') # code Unicode de 'é'233
>>> chr(65) # caractère de code 65'A'
>>> chr(233) # caractère de code 233'é'
>>> chr(128512) # un emoji !'😀'6.2 Parcourir une chaîne et ses codes
Section intitulée « 6.2 Parcourir une chaîne et ses codes »mot = "Bonjour"for caractere in mot: print(caractere, "->", ord(caractere))Résultat :
B -> 66o -> 111n -> 110j -> 106o -> 111u -> 117r -> 1146.3 Conversion majuscule/minuscule par le code ASCII
Section intitulée « 6.3 Conversion majuscule/minuscule par le code ASCII »Puisque l'écart entre une majuscule et sa minuscule est de 32 :
def en_minuscule(caractere): """Convertit une lettre majuscule en minuscule.""" code = ord(caractere) if 65 <= code <= 90: return chr(code + 32) return caractere
print(en_minuscule('H')) # 'h'print(en_minuscule('z')) # 'z' (déjà en minuscule)6.4 Lire et écrire des fichiers avec un encodage
Section intitulée « 6.4 Lire et écrire des fichiers avec un encodage »# Écriture en UTF-8with open("texte.txt", "w", encoding="utf-8") as fichier: fichier.write("Bonjour, ça va ?")
# Lecture en UTF-8with open("texte.txt", "r", encoding="utf-8") as fichier: contenu = fichier.read() print(contenu)
# Lecture en Latin-1 (erreur d'interprétation si le fichier est en UTF-8)with open("texte.txt", "r", encoding="latin-1") as fichier: contenu = fichier.read() print(contenu) # les accents seront mal affichés7. Résumé
Section intitulée « 7. Résumé »| Encodage | Date | Bits par caractère | Nombre de caractères | Couverture |
|---|---|---|---|---|
| ASCII | 1963 | 7 | 128 | Anglais uniquement |
| ISO-8859-1 (Latin-1) | 1986 | 8 | 256 | Europe de l'Ouest |
| Unicode (UTF-8) | 1991 | 8 à 32 (variable) | 150 000+ | Toutes les langues |
| Concept | Détail |
|---|---|
| Encodage | Association entre caractères et nombres |
| ASCII | Premier standard, 128 caractères, pas d'accents |
| Latin-1 | Extension de l'ASCII, 256 caractères, accents européens |
| Unicode | Catalogue universel de tous les caractères du monde |
| UTF-8 | Encodage à taille variable, compatible ASCII, standard du Web |
Python : ord() | Renvoie le code d'un caractère |
Python : chr() | Renvoie le caractère d'un code |
| Bonne pratique | Toujours utiliser UTF-8 |
© 2026 Corentin Dupont - LyCode
Créé avec Astro Starlight