Outils pour utilisateurs

Outils du site


nsi:premiere:exercices:fonctions_encode_decode

Exercice : Fonctions encode et decode

Que produisent les commandes suivantes – en console Python :

>>>"école".encode('ascii')
>>> "école".encode('iso-8859-1')
>>> "école".encode('utf-8')

Comprendre le résultat :

  • Le b en tête de la réponse, signifie que ce n'est plus un texte mais une suite d'octets (byte).
  • Quand ces octets correspondent à de l'ASCII, on donne le caractère correspondant.
  • Sinon, on écrit l'octet en hexadécimal. En ISO, le é était codé par l'octet E9. En UTF-8, ce même é était codé par les deux octets C3 A9.

On va tenter les opérations inverses :

>>> b'\xc3\xa9cole'.decode('utf-8')
>>> b'\xe9cole'.decode('iso-8859-1')

Sans surprise, le décodage se passe normalement.

Essayons maintenant de décoder de travers :

>>> b'\xc3\xa9cole'.decode('iso-8859-1')
>>> b'\xe9cole'.decode('utf-8')

Comprendre le résultat :

  • Dans le premier cas, pour ISO, chaque octet est un caractère. C3 A9 sont compris comme ©
  • Dans le deuxième cas, UTF-8 rencontre E9 suivi de 'c', ce qui ne devrait pas arriver, d'où l'erreur.

Vous reconnaissez une situation courante sur internet, quand un problème d'encodage rend les caractères accentués illisibles.

nsi/premiere/exercices/fonctions_encode_decode.txt · Dernière modification : de goupillwiki