Sollte ich die Codierungsdeklaration in Python 3 verwenden?

114

Python 3 verwendet standardmäßig die UTF-8-Codierung für Quellcodedateien. Sollte ich die Codierungsdeklaration am Anfang jeder Quelldatei weiterhin verwenden? Mögen# -*- coding: utf-8 -*-

Mateusz Jagiełło
quelle

Antworten:

112

Da der Standard ist UTF-8, müssen Sie nur diese Erklärung verwenden , wenn Sie vom Standard abweichen, oder wenn Sie auf andere Werkzeuge (wie Ihre IDE oder Texteditor) angewiesen , um die Verwendung dieser Informationen zu machen.

Mit anderen Worten, für Python müssen Sie diese Deklaration nur verwenden, wenn Sie eine andere Codierung verwenden möchten.

Andere Werkzeuge, wie der Editor, kann ähnliche Syntax unterstützen, weshalb die PEP 263 Spezifikation für eine beträchtliche Flexibilität in der Syntax erlaubt (es muss ein Kommentar sein, der Text codingmuss es sein, gefolgt von entweder einem :oder =Zeichen und optional Leerzeichen, gefolgt von einem anerkannten Codec).

Beachten Sie, dass dies nur für das Lesen des Quellcodes durch Python gilt . Dies gilt nicht für die Ausführung dieses Codes, also nicht für die Übersetzung, das Öffnen von Dateien oder andere E / A-Vorgänge zwischen Bytes und Unicode. Für weitere Informationen zu Python, Unicode und Codierungen empfehle ich Ihnen dringend, das Python Unicode HOWTO oder den sehr gründlichen Pragmatic Unicode- Vortrag von Ned Batchelder zu lesen .

Martijn Pieters
quelle
28
Dies # -*- coding: utf-8 -*-kann für einige Editoren weiterhin nützlich sein, um beim Bearbeiten der Quelldatei zur erwarteten Codierung zu wechseln.
Pepr
1
@pepr Ein Byte Order Mark könnte dasselbe tun, nein?
Endolith
12
@endolith: Die UTF-8-Stückliste ist ein Greuel auf dieser Erde, der von Microsoft hervorgebracht wurde. Siehe en.wikipedia.org/wiki/Byte_order_mark#UTF-8
Martijn Pieters
1
@MartijnPieters Ihr Link scheint nicht mit Ihnen übereinzustimmen
Endolith
2
@endolith: nein, der WP-Artikel fasst nur den Hintergrund zusammen, ich bin der Meinung, dass es ein Greuel ist. Der Sinn einer Stückliste besteht darin, die Bytereihenfolge aufzuzeichnen (daher der Name Byte Order Mark). In UTF-8 gibt es keine Verwechslung der Bytereihenfolge, sondern nur in UTF-16 und UTF-32. Der Wert ist bereits ein zweckentfremdetes Leerzeichen ohne Unterbrechung (praktisch, da versehentliches Drucken dann zu einer völlig unsichtbaren Ausgabe führt). Die Wiederverwendung als magische Konstante ist meiner Ansicht nach falsch.
Martijn Pieters
6

Nein, wenn:

  • Das gesamte Projekt verwendet nur das UTF-8, was ein Standard ist.
  • und Sie sind sicher, dass Ihr IDE-Tool diese Codierungsdeklaration nicht in jeder Datei benötigt.

Ja, wenn

  • Ihr Projekt basiert auf einer anderen Codierung
  • oder stützt sich auf viele Codierungen.

Für Multi-Coding-Projekte:

Wenn einige Dateien in der non-utf-8codiert sind UTF-8, sollten Sie auch für diese in codierte Dateien eine Codierungsdeklaration hinzufügen, da die goldene Regel lautetExplicit is better than implicit.

Referenz:

  • PyCharm benötigt diese Erklärung nicht:

Konfigurieren der Codierung für eine bestimmte Datei in pycharm

  • vim braucht diese Erklärung nicht, aber:
# vim: set fileencoding=<encoding name> :
Sławomir Lenart
quelle