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

135

Python reconnaît ce qui suit comme instruction qui définit le codage du fichier:

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

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

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

hamstergène
la source
3
Ceci est plus facile à retenir et fonctionne dans mon éditeur, PyCharm. # coding: utf-8
crizCraig
2
Utiliser # coding: utf8des outils prêts à l'emploi avec Python 2.7, même en dehors de PyCharm. (J'utilise SublimeText).
Basj
1
@Cbhihe Cette question ne concerne pas Python, pas ce que fait l'instruction ou comment elle fonctionne. Il demande quel logiciel pré-Python l'a inventé et s'il y a plus qu'un simple encodage de fichier.
hamstergene

Réponses:

89

Cette façon de spécifier le codage d'un fichier Python provient de PEP 0263 - Définition des codages de code source Python .

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

Andrea Spadaccini
la source
4
D'après ce que je peux conclure du manuel Emacs, la valeur peut être n'importe quelle expression LISP, en particulier, une chaîne entre
guillemets
Merci pour le lien de soutien. J'avais autrefois l'impression que la directive n'était utilisée que par l'éditeur de texte. Jusqu'à présent, je n'ai jamais su que l'interpréteur python analysait réellement le commentaire s'il était présent sur les deux premières lignes du fichier.
umeboshi
8

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

Alex Ott
la source
Ce type spécifique de variable locale de fichier est également compris par l'interpréteur Python lui-même, ce n'est pas seulement pour les éditeurs de texte. stackoverflow.com/questions/41680533/…
Boris le
4

Dans PyCharm, je le laisserais de côté. Il éteint l'indicateur UTF-8 en bas avec un avertissement que l'encodage est codé en dur. Ne pensez pas que vous avez besoin du commentaire PyCharm mentionné ci-dessus.

cwp393
la source
en fait, si je mets une ligne comme test1 = 'äöü'celle-ci, vous serez invité à ajouter un tel en-tête au fichier. (pycharm 2019.1)
Cutton Eye
@Cutton Eye est-ce avec Python 2 ou 3?
Boris le