Heim > Artikel > Backend-Entwicklung > Wie kann ich Unicode-Dateien (UTF-8) in Python korrekt lesen und schreiben?
Unicode (UTF-8) Datei-E/A in Python
In Python umfasst die Verarbeitung von Unicode-Text in Dateien Kodierungs- und Dekodierungsvorgänge. Das Verständnis dieser Konzepte kann jedoch eine Herausforderung sein, wie ein häufiges Problem zeigt:
Verwirrung entschlüsseln:
Bedenken Sie den folgenden Code in Python 2.4:
<code class="python">ss = u'Capit\xe1n' ss8 = ss.encode('utf8') print(ss, ss8)</code>
Dieser Code gibt aus:
Capit\xe1n b'Capit\xc3\xa1n'
Das a-akute Zeichen (á) wird in Unicode (u'Capitxe1n') und UTF-8 (ss8 = 'Capitxc3xa1n') unterschiedlich dargestellt. Beim Drucken von ss8 verwendet Python standardmäßig eine ASCII-Darstellung, daher die xc3xa1n-Sequenz.
Das Öffnen der Datei „f1“ im Schreibmodus und das Schreiben von ss8 in sie führt dazu, dass „Capitxc3xa1nn“ in die Datei geschrieben wird. Umgekehrt versucht Python beim Schreiben von ss in eine andere Datei „f2“, das a-akute Zeichen als Escape-Sequenz zu interpretieren, was zu „Capitxc3xa1nn“ führt.
Dekodierungslösung:
Um diese Verwirrung zu beseitigen, geben Sie die Codierung beim Öffnen der Datei explizit an. In Python 2.6 und höher kann die Funktion io.open verwendet werden:
<code class="python">import io f = io.open("test", mode="r", encoding="utf-8")</code>
Dieser Ansatz stellt sicher, dass die Datei in UTF-8 gelesen und geschrieben wird, sodass keine manuelle Kodierung und Dekodierung erforderlich ist. In Python 3.x ist die io.open-Funktion ein Alias für die integrierte open-Funktion, die auch das Kodierungsargument unterstützt.
Alternativ kann das Codecs-Modul verwendet werden:
<code class="python">import codecs f = codecs.open("test", "r", "utf-8")</code>
Es ist wichtig zu beachten, dass das Mischen der Methoden read() und readline() bei der Verwendung von codecs.open zu Problemen führen kann.
Das obige ist der detaillierte Inhalt vonWie kann ich Unicode-Dateien (UTF-8) in Python korrekt lesen und schreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!