Codages ASCII, Latin-1 et UTF-8

  1. Peut-on encoder en ASCII le texte « Ne désire que ce que tu as. »?

  2. Trouver le texte représenté en ASCII binaire par la suite de bits 01000011 00100111 01100101 01110011 01110100 00100000 01100110 01100001 01100011 01101001 01101100 01100101

    01000011|C 00100111|' 01100101|e 01110011|s 01110100|t 00100000|  01100110|f 01100001|a 01100011|c 01101001|i 01101100|l 01100101|e 
    
    C'est facile
    
  3. Traduire une phrase en ASCII binaire, puis la passer à son voisin pour qu’il la décode. Si vous n’avez pas de voisin utilisez: « Parler ne fait pas cuire le riz. »

    P|01010000 a|01100001 r|01110010 l|01101100 e|01100101 r|01110010  |00100000 n|01101110 e|01100101  |00100000 f|01100110 a|01100001 i|01101001 t|01110100  |00100000 p|01110000 a|01100001 s|01110011  |00100000 c|01100011 u|01110101 i|01101001 r|01110010 e|01100101  |00100000 l|01101100 e|01100101  |00100000 r|01110010 i|01101001 z|01111010 .|00101110 
    
    01010000 01100001 01110010 01101100 01100101 01110010 00100000 01101110 01100101 00100000 01100110 01100001 01101001 01110100 00100000 01110000 01100001 01110011 00100000 01100011 01110101 01101001 01110010 01100101 00100000 01101100 01100101 00100000 01110010 01101001 01111010 00101110 
    
  4. Traduire une phrase en ASCII hexadécimal, puis la passer à son voisin qui la décode. Si vous n’avez pas de voisin utilisez: « Lever la voix ne donne pas raison. ».

    L|4C e|65 v|76 e|65 r|72  |20 l|6C a|61  |20 v|76 o|6F i|69 x|78  |20 n|6E e|65  |20 d|64 o|6F n|6E n|6E e|65  |20 p|70 a|61 s|73  |20 r|72 a|61 i|69 s|73 o|6F n|6E .|2E 
    
    4C 65 76 65 72 20 6C 61 20 76 6F 69 78 20 6E 65 20 64 6F 6E 6E 65 20 70 61 73 20 72 61 69 73 6F 6E 2E 
    
  5. Recommencer en utilisant une phrase avec des accents que vous coderez en hexadécimal avec l’encodage latin-1(ISO 8859-1). Si vous n’avez pas de voisin utilisez: « Les excès tuent plus sûrement que les épées. »

    L|4c e|65 s|73  |20 e|65 x|78 c|63 è|e8 s|73  |20 t|74 u|75 e|65 n|6e t|74  |20 p|70 l|6c u|75 s|73  |20 s|73 û|fb r|72 e|65 m|6d e|65 n|6e t|74  |20 q|71 u|75 e|65  |20 l|6c e|65 s|73  |20 é|e9 p|70 é|e9 e|65 s|73 .|2e 
    
    4c 65 73 20 65 78 63 e8 73 20 74 75 65 6e 74 20 70 6c 75 73 20 73 fb 72 65 6d 65 6e 74 20 71 75 65 20 6c 65 73 20 e9 70 e9 65 73 2e 
    
  6. Rédiger un paragraphe expliquant l’intérêt du codage UTF-8, ses avantages et ses inconvénients par rapport l’ASCII ou au codage ISO-8859-1.

Informatique et sciences du numérique Spécialité ISN en terminale S - Avec des exercices corrigés et des idées de projets par Gilles Dowek

Encodage et décodage en Python

Encodage

Tenter d’encoder la première phrase du texte avec python.

phrase = "Grace Murray Hopper, née le 9 décembre 1906 à New York et morte le 1er janvier"
phrase.encode("utf-8")
  1. Recommencer avec les encodages ISO-8859-1 et ISO-8859-11. Noter vos observations.
  2. Montrer que le caractère € peut être encodé en UTF-8, ISO-8859-15, mais pas ISO-8859-1.

Décodage

Tenter de décoder quelques caractères de leur forme binaire (hexadécimale) vers leur représentation réelle.

b'\xc3\xa9'.decode('utf-8')
  1. Rechercher d’autres codes hexadécimaux de caractères UTF-8 à décoder sur l’article Wikipédia.
  2. Rechercher des codes de caractères hexadécimaux iso-8859-1 à décoder.

Lecture et écriture de fichiers en Python

Lecture de fichier

Pour lire un fichier texte depuis Python, la syntaxe est la suivante:

with open('file-utf-8.md') as f:
    read_data = f.read()
    print(read_data)

Dans ce cas, on lit le fichier sous forme de texte encodé (par défaut utf-8)

Mais si on a besoin, on peut aussi lire le texte sous forme de bits, en ajoutant un deuxième argument à la fonction open (ici "rb" pour read bytes):

with open('file-utf-8.md', 'rb') as f:
    read_data = f.read()
    print(read_data)

Écriture de fichiers

Dans ce cas le deuxième argument est "w" pour write ou "wb" pour write bytes.

with open('file-from-python-utf-8.md', 'w') as f:
    f.write("À l'origine, ce fichier texte a été écrit depuis python")

# Vérification
with open('file-from-python-utf-8.md') as f:
    read_data = f.read()
    print(read_data)
  1. En utilisant les fonctions vues, écrire un fichier texte depuis Python que vous encoderez d’abord en utf-8, puis en iso-8859-15.
  2. Comparer les codes binaires des deux fichiers.