171 votes

D'où cela vient-il : -*- codage : utf-8 -*-

Python reconnaît l'instruction suivante qui définit l'encodage du fichier :

# -*- coding: utf-8 -*-

J'ai certainement vu ce genre d'instructions avant ( -*- var: value -*- ). D'où vient-il ? Quelle est la spécification complète, par exemple, la valeur peut-elle inclure des espaces, des symboles spéciaux, des retours à la ligne, voire même des mots de passe ? -*- elle-même ?

Mon programme va écrire des fichiers de texte brut et j'aimerais y inclure des métadonnées en utilisant ce format.

5 votes

C'est plus facile à retenir et fonctionne dans mon éditeur, PyCharm. # coding: utf-8

3 votes

Utilisation de # coding: utf8 fonctionne d'emblée avec Python 2.7, même sans PyCharm. (J'utilise SublimeText).

104voto

Andrea Spadaccini Points 4755

Cette manière de spécifier l'encodage d'un fichier Python vient de PEP 0263 - Définition des encodages du code source Python .

Il est également reconnu par GNU Emacs (voir Référence du langage Python, 2.1.4 Déclarations de codage ), bien que je ne sache pas si c'était le premier programme à utiliser cette syntaxe.

5 votes

D'après ce que je peux conclure du manuel d'Emacs, la valeur peut être n'importe quelle expression LISP, en particulier une chaîne de caractères entre guillemets.

0 votes

Merci pour le lien vers le Pep. J'avais auparavant l'impression que la directive n'était utilisée que par l'éditeur de texte. Jusqu'à présent, je ne savais pas que l'interpréteur python analysait le commentaire s'il était présent sur les deux premières lignes du fichier.

0 votes

Il était utilisé par emacs au moins en 1997...

59voto

Boris Points 1440

# -*- coding: utf-8 -*- est une caractéristique de Python 2. Dans Python 3+, la fonction l'encodage par défaut des fichiers sources est déjà UTF-8 et cette ligne est inutile.

Voir : Dois-je utiliser la déclaration d'encodage dans Python 3 ?

pyupgrade est un outil que vous pouvez exécuter sur votre code pour supprimer ces commentaires et d'autres restes inutiles de Python 2, comme le fait que toutes vos classes héritent de object .

10voto

Alex Ott Points 14329

C'est ce qu'on appelle les variables locales de fichier, qui sont comprises par Emacs et définies en conséquence. Voir correspondant section dans le manuel Emacs - vous pouvez les définir soit dans l'en-tête soit dans le pied de page du fichier

1 votes

Ce type spécifique de variable locale de fichier est également compris par l'interpréteur Python lui-même, il n'est pas réservé aux éditeurs de texte. stackoverflow.com/questions/41680533/

4voto

cwp393 Points 11

Dans PyCharm, je le laisserais de côté. Il désactive l'indicateur UTF-8 en bas avec un avertissement que l'encodage est codé en dur. Je ne pense pas que vous ayez besoin du commentaire PyCharm mentionné ci-dessus.

0 votes

En fait, si je mets une ligne comme test1 = 'äöü' il vous indiquera d'ajouter un tel en-tête au fichier. (pycharm 2019.1)

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