Dois-je utiliser une déclaration d'encodage dans Python 3?

114

Python 3 utilise le codage UTF-8 pour les fichiers de code source par défaut. Dois-je toujours utiliser la déclaration d'encodage au début de chaque fichier source? Comme# -*- coding: utf-8 -*-

Mateusz Jagiełło
la source

Réponses:

112

Étant donné que la valeur par défaut est UTF-8, vous ne devez utiliser cette déclaration que lorsque vous vous écartez de la valeur par défaut, ou si vous comptez sur d'autres outils (comme votre IDE ou votre éditeur de texte) pour utiliser ces informations.

En d'autres termes, en ce qui concerne Python, ce n'est que lorsque vous souhaitez utiliser un encodage différent que vous devez utiliser cette déclaration.

D'autres outils, tels que votre éditeur, peuvent prendre en charge une syntaxe similaire, c'est pourquoi la spécification PEP 263 permet une flexibilité considérable dans la syntaxe (il doit s'agir d'un commentaire, le texte codingdoit être là, suivi d'un caractère :ou =et d'un espace blanc facultatif, suivi d'un codec reconnu).

Notez que cela s'applique uniquement à la façon dont Python lit le code source . Cela ne s'applique pas à l'exécution de ce code, donc pas à la façon dont l'impression, l'ouverture de fichiers ou toute autre opération d'E / S se traduisent entre les octets et Unicode. Pour plus de détails sur Python, Unicode et les encodages, je vous encourage vivement à lire le Python Unicode HOWTO , ou le discours très complet Pragmatic Unicode de Ned Batchelder.

Martijn Pieters
la source
28
Le # -*- coding: utf-8 -*-peut encore être utile pour certains éditeurs de passer au codage attendu lors de l'édition du fichier source.
pepr
1
@pepr Un Byte Order Mark pourrait faire la même chose, non?
endolith
12
@endolith: la nomenclature UTF-8 est une abomination sur cette terre présentée par Microsoft. Voir en.wikipedia.org/wiki/Byte_order_mark#UTF-8
Martijn Pieters
1
@MartijnPieters Votre lien ne semble pas être d'accord avec vous
endolith
2
@endolith: non, l'article WP ne résume que le contexte, je pense que c'est une abomination. Le but d'une nomenclature est d'enregistrer l'ordre des octets (d'où le nom, Byte Order Mark). Il n'y a pas de confusion dans l'ordre des octets en UTF-8, il n'a cette fonction qu'en UTF-16 et UTF-32. La valeur est déjà un caractère d'espace sans coupure de largeur zéro redéfini (pratique, car l'impression accidentelle se termine alors par une sortie entièrement invisible), réutiliser cela pour être une constante magique est faux, à mon avis.
Martijn Pieters
6

Non, si:

  • tout le projet utilise uniquement le UTF-8, qui est une valeur par défaut.
  • et vous êtes sûr que votre outil IDE n'a pas besoin de cette déclaration d'encodage dans chaque fichier.

Oui si

  • votre projet repose sur différents encodages
  • ou repose sur de nombreux encodages.

Pour les projets multi-encodages:

Si certains fichiers sont encodés dans non-utf-8, alors même pour ceux encodés dans, UTF-8vous devez également ajouter une déclaration d'encodage, car la règle d'or estExplicit is better than implicit.

Référence:

  • PyCharm n'a pas besoin de cette déclaration:

configuration de l'encodage pour un fichier spécifique dans pycharm

  • vim n'a pas besoin de cette déclaration, mais:
# vim: set fileencoding=<encoding name> :
Sławomir Lenart
la source