====== 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.