Enonce
TD : Manipulation des encodages de caractères
Objectifs :
- Comprendre comment les caractères sont encodés en utilisant différents systèmes d'encodage.
- Savoir comment convertir entre différents encodages.
- Être capable d'identifier l'encodage utilisé pour un texte donné.
Partie 1 : Découverte des encodages
Pour cette partie, utilisez un éditeur de texte qui permet de choisir l'encodage lors de l'enregistrement d'un fichier (comme Notepad++).
- Créez un nouveau fichier texte, et écrivez le mot "Bonjour" dedans.
- Enregistrez le fichier en utilisant l'encodage ASCII. Qu'observez-vous ?
- Réessayez en utilisant l'encodage ISO-8859-1. Qu'est-ce qui change ?
- Enfin, enregistrez le fichier en utilisant l'encodage UTF-8.
Partie 2 : Conversion entre encodages
Pour cette partie, utilisez un outil en ligne qui permet de convertir entre différents encodages, comme cet outil.
- Choisissez un mot ou une phrase en français qui utilise des caractères accentués (par exemple, "révolution").
- Convertissez ce texte en binaire en utilisant l'encodage UTF-8. Notez le résultat.
- Convertissez maintenant le même texte en binaire en utilisant l'encodage ISO-8859-1. Notez le résultat.
- Comparez les deux résultats. Qu'observez-vous ?
Partie 3 : Identification de l'encodage
Pour cette partie, utilisez un outil en ligne qui permet de deviner l'encodage d'un texte, comme cet outil.
- Choisissez trois textes différents, de préférence dans différentes langues.
- Convertissez chaque texte en binaire en utilisant un encodage différent pour chaque texte.
- Utilisez l'outil pour essayer de deviner quel encodage a été utilisé pour chaque texte. L'outil a-t-il raison ?
Partie 4 : Python
- Dans un interpréteur Python, exécutez successivement les instructions
chr(212)etchr(169). Qu'en déduisez-vous sur la spécification de la fonctionchr?
- Dans un interpréteur Python, exécutez successivement les instructions
ord('©')etord('à'). Qu'en déduisez-vous sur la spécification de la fonctionord?
- Écrire une fonction
binaire_utf8, qui prend en paramètre un point de code Unicode sous la forme d'un entier et renvoie la représentation binaire UTF-8 du caractère associé, sous la forme d'une liste d'octet (un octet est une liste de bits).
Conseil : Vous pouvez réutiliser les fonctions de conversion en binaire des précédentes séances ainsi que la méthode vue en cours.
def binaire_utf8(code):
binaire_code = binaire(code)
if len(binaire_code) < 8:
return binaire_code
elif 8 <= binaire_code < 12:
return '110' + binaire_code[:5] + '10' + binaire_code[5:]
elif 12 <= binaire_code < 17:
return '1110' + binaire_code[:4] + '10' + binaire_code[4:10] + '10' + binaire_code[10:]
elif 17 <= binaire_code:
return '11110' + binaire_code[:3] + '10' + binaire_code[3:9] + '10' + binaire_code[9:15] + '10' + binaire_code[15:]
Q4. Écrire une fonction str_to_utf8, qui prend en paramètre une chaine de caractère et renvoie la représentation binaire UTF-8, en hexadécimal, de l'ensemble des caractères de la chaine. Exécutez votre fonction sur la chaine Rien ne sert de courir ; il faut partir à point. Le Lièvre et la Tortue en sont un témoignage. Comparez le résultat obtenu avec celui de l'observation 12.
def str_to_utf8(chaine):
l = []
for caractere in chaine:
l.append(hexadecimal(binaire_utf8(ord(caractere))))
return l
Réflexion Finale :
- Pourquoi est-il important de connaître l'encodage utilisé pour un texte ?
- Quels problèmes peut-on rencontrer si on utilise le mauvais encodage pour lire un texte ?
- Comment l'UTF-8 a-t-il aidé à résoudre certains de ces problèmes ?
Auteurs : Florian Mathieu - Philippe Boddaert
Licence CC BY NC
Ce cours est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.