180 votes

Correct façon de définir le code source Python encodage

PEP 263 définit la manière de définir le code source Python encodage.

Normalement, les 2 premières lignes d'un fichier Python devrait commencer par:

#!/usr/bin/python
# -*- coding: <encoding name> -*-

Mais j'ai vu beaucoup de fichiers à partir de:

#!/usr/bin/python
# -*- encoding: <encoding name> -*-

-> encodage au lieu de codage.

Alors, quelle est la bonne façon de déclarer l'encodage du fichier ?

Est l'encodage de permis en raison de l'expression régulière utilisée est paresseux ? Ou est-ce juste une autre forme de déclarer l'encodage du fichier ?

Je vous pose cette question parce que le PEP ne parle pas de l'encodage, c'est juste parle de codage.

173voto

Rafał Dowgird Points 16600

Vérifiez les docs ici:

"Si un commentaire dans la première ou la deuxième ligne du script Python correspond à l'expression régulière coding[=:]\s*([-\w.]+), ce commentaire est traitée comme une déclaration de codage"

"Le recommandé les formes de cette expression sont

# -*- coding: <encoding-name> -*-

qui est reconnu par GNU Emacs, et

# vim:fileencoding=<encoding-name>

qui est reconnu par Bram Moolenaar de VIM."

Donc, vous pouvez mettre à peu près tout avant le "codage" de la partie, mais s'en tenir à "codage" (sans préfixe) si vous voulez être 100% python-docs-recommandation-compatible.

43voto

vartec Points 53382

PEP 263:

la première ou la deuxième ligne doit correspondre à le régulier l'expression "codage[:=]\s*([-\w]+)"

De toute évidence, "frcoding: UTF-8" matchs.

PEP donne quelques exemples:

      #!/usr/bin/python
      # vim: set fileencoding=<encoding name> :

 

      # This Python file uses the following encoding: utf-8
      import os, sys

0voto

Lasse V. Karlsen Points 148037

Si je ne me trompe pas, la proposition initiale de la source du fichier codages était d'utiliser une expression régulière pour le premier couple de lignes, ce qui permettrait à la fois.

Je pense que la regex était quelque chose le long des lignes de coding: , suivi par quelque chose.

J'ai trouvé ceci: http://www.python.org/dev/peps/pep-0263/ Qui est à l'origine de la proposition, mais je n'arrive pas à trouver la dernière spec de préciser exactement ce qu'ils ont fait.

J'ai certainement utilisé encoding: à grand effet, alors, évidemment, cela fonctionne.

Essayez de changer pour quelque chose de complètement différent, comme duhcoding: ... pour voir si cela fonctionne tout aussi bien.

0voto

Matthew Schinckel Points 15596

Je soupçonne que c'est similaire à Ruby - soit la méthode est d'accord.

C'est en grande partie parce que les différents éditeurs de texte, utilisation de différentes méthodes (ie, ces deux) de marquage, de codage.

Avec Ruby, aussi longtemps que le premier, ou le deuxième si il ya une ligne shebang contient une chaîne de caractères qui correspond à:

coding: encoding-name

et en ignorant les espaces et autres peluches sur ces lignes. (Il peut souvent être un = au lieu de :, trop).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X