PEP 263 definiert, wie die Python-Quellcode-Codierung deklariert wird.
Normalerweise sollten die ersten beiden Zeilen einer Python-Datei beginnen mit:
#!/usr/bin/python
# -*- coding: <encoding name> -*-
Aber ich habe viele Dateien gesehen, beginnend mit:
#!/usr/bin/python
# -*- encoding: <encoding name> -*-
=> Kodierung statt Kodierung .
Wie kann die Dateicodierung korrekt deklariert werden?
Ist die Codierung zulässig, da der verwendete reguläre Ausdruck faul ist? Oder ist es nur eine andere Form, die Dateicodierung zu deklarieren?
Ich stelle diese Frage, weil der PEP nicht über Codierung spricht, sondern nur über Codierung .
#!/usr/bin/env python
anstelle von#!/usr/bin/python
ascii
auf geändert hatUTF-8
. Vergleichen Sie: Python 2.7-Dokumente mit Python 3.7-Dokumenten . Dies bedeutet, dass Sie diese Codierung sicher weglassen können, wenn Sie angeben möchtenUTF-8
.Antworten:
Überprüfen Sie die Dokumente hier :
"Wenn ein Kommentar in der ersten oder zweiten Zeile des Python-Skripts mit dem regulären Ausdruck übereinstimmt
coding[=:]\s*([-\w.]+)
, wird dieser Kommentar als Codierungsdeklaration verarbeitet.""Die empfohlenen Formen dieses Ausdrucks sind
was auch von GNU Emacs anerkannt wird, und
was von Bram Moolenaars VIM erkannt wird. "
Sie können also so ziemlich alles vor den Teil "Codierung" stellen, aber bei "Codierung" (ohne Präfix) bleiben, wenn Sie 100% Python-Docs-Empfehlungskompatibel sein möchten.
Insbesondere müssen Sie alles verwenden, was von Python erkannt wird, und die spezifische Bearbeitungssoftware, die Sie verwenden (wenn sie überhaupt etwas benötigt / akzeptiert). ZB wird die
coding
Form von GNU Emacs (sofort) anerkannt, aber nicht von Vim (ja, ohne eine universelle Vereinbarung handelt es sich im Wesentlichen um einen Rasenkrieg ).quelle
-*-
?-*-
stellt sicher , dass die Leitung von GNU Emacs (ein Texteditor beliebt bei einigen Programmierern) erkannt wird. Beachten Sie, dass im Gegensatz zu dieser Antwort sowohl das Emacs-Formular als auch das Vim-Formular zu 100% mit Python-Docs-Empfehlungen kompatibel sind (da beide mit dem regulären Ausdruck übereinstimmen - "Übereinstimmung" bedeutet nach langjähriger Konvention "Übereinstimmung irgendwo in der." string ", im Gegensatz zu Pythons API).<prefix>-*- var: value[; ...] -*-
.PEP 263:
"En Coding: UTF-8 " stimmt also überein.
PEP bietet einige Beispiele:
quelle
Kopieren Sie einfach die Anweisung unter Einfügen oben in Ihrem Programm. Dadurch werden Probleme bei der Zeichenkodierung gelöst
quelle
Stand heute - Juni 2018
PEP 263 selbst erwähnt den regulären Ausdruck, dem es folgt:
Wie bereits in anderen Antworten zusammengefasst, stimmt es
coding
mit jedem Präfix überein , aber wenn Sie so PEP-konform wie möglich sein möchten (auch wenn, soweit ich das beurteilen kann, die Verwendung vonencoding
anstelle voncoding
nicht verletzt wird PEP 263 in irgendeiner Weise) - bleiben Sie bei 'plain'coding
, ohne Präfixe.quelle
Wenn ich mich nicht irre, bestand der ursprüngliche Vorschlag für die Codierung von Quelldateien darin, für die ersten Zeilen einen regulären Ausdruck zu verwenden, der beides zulässt.
Ich denke, der Regex war etwas in der Art von
coding:
gefolgt von etwas.Ich habe Folgendes gefunden: http://www.python.org/dev/peps/pep-0263/ Dies ist der ursprüngliche Vorschlag, aber ich kann die endgültige Spezifikation nicht finden, in der genau angegeben ist, was sie getan haben.
Ich habe mich auf jeden Fall
encoding:
sehr gut bewährt, also funktioniert das offensichtlich.Versuchen Sie, zu etwas völlig anderem zu wechseln, um
duhcoding: ...
zu sehen, ob das genauso gut funktioniert.quelle
Ich vermute, es ist Ruby ähnlich - beide Methoden sind in Ordnung.
Dies liegt hauptsächlich daran, dass verschiedene Texteditoren unterschiedliche Methoden (dh diese beiden) zum Markieren der Codierung verwenden.
Mit Ruby, solange die erste oder zweite, wenn es eine Shebang-Zeile gibt, eine Zeichenfolge enthält, die übereinstimmt:
und Ignorieren von Leerzeichen und anderen Flusen in diesen Zeilen. (Es kann oft auch ein = statt: sein).
quelle