PEP 3120 – UTF-8 als Standard-Quellcode-Kodierung verwenden
- Autor:
- Martin von Löwis <martin at v.loewis.de>
- Status:
- Final
- Typ:
- Standards Track
- Erstellt:
- 15. April 2007
- Python-Version:
- 3.0
- Post-History:
Inhaltsverzeichnis
Spezifikation
Dieser PEP schlägt vor, die Standard-Quellcode-Kodierung von ASCII auf UTF-8 zu ändern. Unterstützung für alternative Quellcode-Kodierungen (PEP 263) bleibt bestehen; eine explizite Kodierungserklärung hat Vorrang vor der Standardeinstellung.
Ein kleiner Rückblick
In Python 1 war die Quellcode-Kodierung nicht spezifiziert, außer dass sie eine Obermenge des grundlegenden Ausführungszeichensatzes des Systems sein musste (d. h. eine ASCII-Obermenge, auf den meisten Systemen). Die Quellcode-Kodierung war nur für das Lexikon selbst relevant (Bytes, die Buchstaben für Schlüsselwörter, Bezeichner, Satzzeichen, Zeilenumbrüche usw. darstellen). Der Inhalt eines String-Literals wurde wörtlich aus der Quelldatei kopiert.
In Python 2.0 wurde die Quellcode-Kodierung als Nebeneffekt der Einführung von Unicode zu Latin-1 geändert. Für Unicode-String-Literale wurden die Zeichen immer noch wörtlich aus der Quelldatei kopiert, aber Zeichen für Zeichen erweitert. Da Unicode Code Points eine feste Interpretation gibt, legte dieser Algorithmus effektiv eine Quellcode-Kodierung fest, zumindest für Dateien, die Nicht-ASCII-Zeichen in Unicode-Literalen enthielten.
PEP 263 identifizierte das Problem, dass in einem Unicode-Literal nur die Unicode-Zeichen verwendet werden können, die auch in Latin-1 enthalten sind, und führte eine Syntax zur Deklaration der Quellcode-Kodierung ein. Wenn keine Quellcode-Kodierung angegeben wurde, sollte die Standardeinstellung ASCII sein. Aus Kompatibilitätsgründen mit Python 2.0 und 2.1 wurden Dateien während einer Übergangszeit als Latin-1 interpretiert. Dieser Übergang endete mit Python 2.5, das einen Fehler ausgibt, wenn Nicht-ASCII-Zeichen gefunden werden und keine Quellcode-Kodierung deklariert ist.
Begründung
Mit PEP 263 ist die Verwendung beliebiger Nicht-ASCII-Zeichen in einer Python-Datei möglich, aber mühsam. Man muss explizit eine Kodierungserklärung hinzufügen. Auch wenn einige Editoren (wie IDLE und Emacs) die Deklarationen von PEP 263 unterstützen, tun dies viele Editoren immer noch nicht (und werden es nie tun); Benutzer müssen die Kodierung, die der Editor für eine Datei annimmt, explizit anpassen.
Wenn die Standardkodierung auf UTF-8 geändert wird, wird das Hinzufügen von Nicht-ASCII-Text zu Python-Dateien einfacher und portabler: Auf einigen Systemen wählen Editoren beim Speichern von Text automatisch UTF-8 (z. B. auf Unix-Systemen, wo die Locale UTF-8 verwendet). Auf anderen Systemen erraten Editoren die Kodierung beim Lesen der Datei, und UTF-8 ist leicht zu erraten. Wieder andere Editoren unterstützen die Zuordnung einer Standardkodierung zur Dateiendung und ermöglichen es Benutzern, .py mit UTF-8 zu verknüpfen.
Für Python 2 war ein wichtiger Grund für die Verwendung von Nicht-UTF-8-Kodierungen, dass Byte-String-Literale zur Laufzeit in der Quellcode-Kodierung vorlagen, was es ihnen ermöglichte, sie in eine Datei auszugeben oder sie dem Benutzer so anzuzeigen. Mit Python 3 werden alle Strings Unicode-Strings sein, sodass die ursprüngliche Kodierung der Quelle keinen Einfluss auf die Laufzeit haben wird.
Implementierung
Der Parser muss so geändert werden, dass er Bytes > 127 akzeptiert, wenn keine Quellcode-Kodierung angegeben ist; anstatt einen Fehler auszugeben, muss er prüfen, ob die Bytes korrektes UTF-8 sind (Dekodierung ist nicht notwendig, da der Parser ohnehin den gesamten Quellcode in UTF-8 konvertiert).
IDLE muss so geändert werden, dass UTF-8 als Standardkodierung verwendet wird.
Urheberrecht
Dieses Dokument wurde gemeinfrei erklärt.
Quelle: https://github.com/python/peps/blob/main/peps/pep-3120.rst
Zuletzt geändert: 2025-02-01 08:59:27 GMT