PI-Python-Encoding

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Préambule

Un jour, en naviguant sur la toile, j'ai trouvé l'article "L’encoding en Python, une bonne fois pour toute" édité par Sam & Max.

De prime abord, il serait tentant de regarder ailleurs et d'ignorer ce truc bizarre avec Unicode, l'encodage et le décodage des chaîne de caractères.

Pourtant, si vous négliger l'encodage, il pourrait un jour devenir votre pire cauchemar (et c'est peu dire).

PI-Python-Encoding.jpg

Je l'ai moi même payé en voulant imprimer des séquences d'échappement sur une imprimante HP réseau (heureusement, c'est résolu depuis).

L'encoding en Python une bonne fois pour toute

Voici l'intro de l'article de Sam & Max...

Vous avez tous un jour eu l’erreur suivante :

 UnicodeDecodeError: 'machine' codec can't decode character 'trucmuche' in position x: ordinal not in range(z)

Et là, pour vous en sortir, vous en avez chié des ronds de pâté.

Le problème vient du fait que la plupart du temps, ignorer l’encoding marche : nous travaillons dans des environnements homogènes et toujours avec des données dans le même format, ou un format plus ou moins compatible.

Mais le texte, c’est compliqué, terriblement compliqué, et le jour où ça se gâte, si vous ne savez pas ce que vous faites, vous ne vous en sortirez pas.

C’est d’autant plus vrai en Python car :

  • Par défaut, Python plante sur les erreurs d’encoding là où d’autres langages (comme le PHP) se débrouillent pour vous sortir un truc (qui ne veut rien dire, qui peut corrompre toute votre base de données, mais qui ne plante pas).
  • Python est utilisé dans des environnements hétérogènes. Quand vous codez en JS sur le navigateur, vous n’avez presque jamais à vous soucier de l’encoding : le browser gère quasiment tout pour vous. En Python dès que vous allez lire un fichier et l’afficher dans un terminal, cela fait potentiellement 3 encoding différents.
  • Python 2.7 a des réglages par défaut très stricts, et pas forcément adaptés à notre informatique moderne (fichier de code en ASCII par exemple).

A la fin de cet article, vous saurez vous sortir de toutes les situations merdiques liées aux encodages.

Poursuivez votre lecture sur l'article de Sam & Max

merci Sam & Max :-)

Références