Votre navigateur n'est pas à jour !

Merci de mettre à jour votre navigateur pour utiliser mon blog. Mettre à jour mon navigateur maintenant

×

Python - L'encodage en python

Date de publication 25 avr. 2019
Il existe des différences importantes entre python 2 et 3 en terme d'encoding.

Sur python 2 l'encoding est en ASCII alors que son successeur encode en unicode (dans les exemples ci dessous nous utiliserons une implementation de Unicode : UTF-8).

La table ASCII ne couvre pas tous les caractères des langues connues, c'est pour cela que l'Unicode est devenu la référence notamment dans python 3.

Si vous souhaitez lancer les scripts suivants et que le résultat n'est pas identique, pensez à vérifier l'encodage de votre IDE. Par exemple dans VSCode il faut mettre
L'IDE s'appuie sur l'OS qui l'héberge donc vous pouvez aussi modifier la langue de l'OS qui aura un impact sur l'encodage.

En python 2 lorsque l'on déclare une chaine de caractère c'est un str, il faut le convertir en unicode pour éviter les erreurs avec decode('utf-8'). Ainsi maintenant vous allez travailler sur un objet unicode.
On peut faire l'opération inverse avec .encode('utf-8') pour obtenir le str qui est simplement une séquence de bytes.
En python 3 la différence importante porte sur str qui utilise les valeurs unicode et non une séquence de bytes.
Et un nouveau type bytes fut introduit dans cette version majeure qui est défini par une séquence d'octets.


En résumé sur python
  • bytes.decode() => convertion d'un bytes vers unicode
  • str.encode() => convertion d'une chaine unicode vers une séquence de bytes
Cependant en fonction de la version de python il faut soit utiliser encode soit decode pour le convertir dans le bon encodage.

Souvent en python 2 il fallait mettre cette ligne lorsque l'on manipulait les string # coding utf8

Si on met un mauvais encodage
On peut décider de changer l'encodage avec la librairie sys
Si on veut encoder dans un format spécifique les données à destination d'un fichier on va modifier la variable d'environnement PYTHONIOENCODING=UTF-8
Voilà l'encodage n'a plus de secret pour vous !
blog comments powered by Disqus