- Identifier l’intérêt des différents systèmes d’encodage.
- Comprendre la différence entre caractère, code et octets.
- Convertir un fichier texte dans différents formats d’encodage.
1. Principe fondamental
Un ordinateur ne manipule que des nombres. Pour représenter un texte, il faut :
- Associer chaque caractère à un nombre (code).
- Stocker ce nombre en mémoire sous forme d’octets selon un encodage.
Vocabulaire
- Un caractère est un symbole lisible (par exemples :
a,é,€). - Un point de code est le numéro unicode du caractère (par exemple,
U+00E9). - Un Encodage est une règle de conversion du code aux octets.
2. ASCII (American Standard Code for Information Interchange) : le premier encodage
Le code ASCII associe un nombre (de 0 à 127) à des caractères utilisés en anglais (lettres non accentuées, chiffres, ponctuation).
Exemple :
A est associé à 65 (en base 10) soit 01000001 en binaire et 0x41 en hexadécimal.
3. ISO-8859 (Latin-1) : une extension limitée
Les encodages ISO-8859 utilisent 8 bits (256 valeurs) pour ajouter
des caractères accentués (ex. é, ç).
- Adapté à certaines langues européennes.
- Incompatible avec d’autres alphabets.
- Un même nombre peut représenter des caractères différents selon la table.
4. Unicode : un code unique pour chaque caractère
Unicode définit un numéro unique (point de code) pour chaque caractère utilisé dans le monde.
Exemples :
Aest codée parU+0041éenU+00E9€enU+20AC
5. UTF-8 (Unicode Transformation Format - 8 bits) : l’encodage universel
UTF-8 est un encodage Unicode très utilisé car :
- Il est compatible avec ASCII.
- Il utilise de 1 à 4 octets par caractère.
- Il permet de représenter tous les caractères Unicode.
| Caractère | Unicode | UTF-8 (hex) | Octets |
|---|---|---|---|
| A | U+0041 | 41 | 1 |
| é | U+00E9 | C3 A9 | 2 |
| € | U+20AC | E2 82 AC | 3 |
6. Manipulation en Python
# Caractère ↔ code Unicode
ord("A") # 65
chr(65) # 'A'
# Texte ↔ octets (UTF-8)
b = "é".encode("utf-8")
print(b) # b'\xc3\xa9'
print(list(b)) # [195, 169]
b.decode("utf-8") # 'é'
strreprésente du texte (Unicode).bytesreprésente des octets.
7. Conversion d’un fichier texte
Convertir un fichier texte consiste à :
- Lire le fichier avec son encodage d’origine.
- Réécrire le texte avec un nouvel encodage.
# Conversion Latin-1 à UTF-8
with open("ancien.txt", "r", encoding="latin-1") as f:
texte = f.read()
with open("nouveau.txt", "w", encoding="utf-8") as f:
f.write(texte)
é au lieu de é).
8. Applications
- Combien d’octets UTF-8 pour le mot « école » ?
- Pourquoi
len("é") == 1maislen("é".encode("utf-8")) == 2? - Convertir un fichier UTF-8 en ISO-8859-1.