Woher kommt das: - * - Kodierung: utf-8 - * -

135

Python erkennt Folgendes als Anweisung, die die Codierung der Datei definiert:

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

Ich habe diese Art von Anweisungen definitiv schon einmal gesehen ( -*- var: value -*-). Woher kommt das? Was ist die vollständige Spezifikation, z. B. kann der Wert Leerzeichen, spezielle Symbole, Zeilenumbrüche oder sogar sich -*-selbst enthalten?

Mein Programm schreibt reine Textdateien und ich möchte einige Metadaten in diesem Format in sie aufnehmen.

Hamstergen
quelle
3
Dies ist leichter zu merken und funktioniert in meinem Editor PyCharm. # coding: utf-8
CrizCraig
2
Die Verwendung # coding: utf8von Python 2.7 funktioniert auch außerhalb von PyCharm. (Ich benutze SublimeText).
Basj
1
@Cbhihe Bei dieser Frage geht es nicht um Python, nicht darum, was die Anweisung tut oder wie sie funktioniert. Es wird gefragt, welche Pre-Python-Software es erfunden hat und ob es mehr als nur Dateikodierung gibt.
Hamstergen

Antworten:

89

Diese Art der Angabe der Codierung einer Python-Datei stammt aus PEP 0263 - Definieren von Python-Quellcode-Codierungen .

Es wird auch von GNU Emacs erkannt (siehe Python-Sprachreferenz, 2.1.4 Codierungsdeklarationen ), obwohl ich nicht weiß, ob es das erste Programm war, das diese Syntax verwendet hat.

Andrea Spadaccini
quelle
4
Nach dem,
Danke für den aufmunternden Link. Ich hatte früher den Eindruck, dass die Richtlinie nur vom Texteditor verwendet wurde. Bis jetzt wusste ich nie, dass der Python-Interpreter den Kommentar tatsächlich analysiert hat, wenn er in den ersten beiden Zeilen der Datei vorhanden ist.
Umeboshi
8

Dies sind sogenannte dateilokale Variablen, die von Emacs verstanden und entsprechend gesetzt werden. Siehe entsprechenden Abschnitt im Emacs-Handbuch - Sie können sie entweder in der Kopf- oder Fußzeile der Datei definieren

Alex Ott
quelle
Diese spezielle Art der lokalen Dateivariablen wird auch vom Python-Interpreter selbst verstanden, nicht nur für Texteditoren. stackoverflow.com/questions/41680533/…
Boris
4

In PyCharm würde ich es weglassen. Die UTF-8-Anzeige unten wird mit einer Warnung ausgeschaltet, dass die Codierung fest codiert ist. Denken Sie nicht, dass Sie den oben erwähnten PyCharm-Kommentar benötigen.

cwp393
quelle
Wenn ich eine Zeile wie test1 = 'äöü'diese eingebe, deutet dies an, dass Sie der Datei einen solchen Kopf hinzufügen. (Pycharm 2019.1)
Eye
@Cutton Eye ist das mit Python 2 oder 3?
Boris