Unicode

Unicode-Kodierung und -Dekodierung

Die Grundlagen

Es gibt zwei Arten von Strings in Python: Byte-Strings und Unicode-Strings. Wie Sie vielleicht schon vermutet haben, ist eine Bytefolge eine Folge von Bytes. Bei Bedarf verwendet Python die Standard-Ländereinstellung Ihres Computers, um die Bytes in Zeichen umzuwandeln. Unter Mac OS X ist das Standardgebietsschema tatsächlich UTF-8, aber an allen anderen Stellen ist das Standardgebiet wahrscheinlich ASCII. Dadurch wird eine Bytezeichenfolge erstellt:

byteString = "hello world! (in my default locale)"

Und das erstellt eine Unicode-Zeichenfolge:

unicodeString = u "Hallo Unicode-Welt!"

Konvertieren Sie einen Byte-String in einen Unicode-String und wieder zurück:

s = "Hallo Bytekette"
u = unicode (s)
backToBytes = u.encode ()

Der vorherige Code verwendet Ihren Standardzeichensatz zum Durchführen der Konvertierungen. Es ist jedoch keine gute Idee, sich auf den Zeichensatz des Gebietsschemas zu verlassen, da Ihre Anwendung wahrscheinlich brechen wird, sobald jemand aus Thailand versucht, sie auf ihrem Computer auszuführen. In den meisten Fällen ist es wahrscheinlich besser, die Codierung der Zeichenfolge explizit anzugeben:

Jetzt werden die Byte-Zeichenfolgen als eine Folge von UTF-8-Byte behandelt, um die Unicode-Zeichenfolge u zu erstellen. Die nächste Zeile speichert die UTF-8-Darstellung von u im Byte-String backToBytes.

Damit Python-Programme plattformunabhängig funktionieren können, sollten sie daher angeben, unter welcher Kodierung sie erstellt wurden. Dies geschieht mit einem speziellen Kommentar, der in der ersten oder zweiten Zeile des Programms stehen muss:

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

Der Kommentar teilt Python mit, dass die Datei in der UTF-8-Kodierung erstellt wurde. Damit wird auf jeder Plattform die Byte-Folge [195, 164] als ä interpretiert.

UTF-8-Dateien lesen

Sie können Zeichenfolgen, die Sie aus Dateien lesen, manuell konvertieren. Es gibt jedoch einen einfacheren Weg:

import codecs
fileObj = codecs.open( "someFile", "r", "utf-8" )
u = fileObj.read() #Gibt eine Unicode-Zeichenfolge aus den UTF-8-Bytes in der Datei zurück

Das Codecs-Modul übernimmt für Sie alle Konvertierungen. Sie können eine Datei auch zum Schreiben öffnen und konvertiert die von Ihnen übergebenen Unicode-Zeichenfolgen in die von Ihnen gewählte Kodierung. Beachten Sie jedoch den Hinweis zur Byte-Order-Markierung (BOM).

Python-Skripte in Unicode schreiben

Wie Sie vielleicht anhand der Beispiele auf dieser Seite bemerkt haben, können Sie tatsächlich Python-Skripts in UTF-8 schreiben. Die Variablen müssen in ASCII sein, Sie können jedoch chinesische Kommentare oder koreanische Zeichenfolgen in Ihre Quelldateien einfügen. Damit dies ordnungsgemäß funktioniert, muss Python wissen, dass Ihre Skriptdatei nicht ASCII ist. Sie können dies auf zwei Arten tun. Zunächst können Sie eine UTF-8-Bytereihenfolge-Markierung an den Anfang Ihrer Datei setzen, sofern Ihr Editor dies unterstützt. Zweitens können Sie den folgenden speziellen Kommentar in die erste oder zweite Zeile Ihres Skripts einfügen:

# - * - Codierung: utf-8 - * -

Jede ASCII-kompatible Kodierung ist zulässig.

Welche Art der Codierung vom System genutzt wird kann wie folgt festgestellt werden:

Python 3.5.1 (default, Jan 22 2019, 08:54:32) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'