[Python-de] Isch habe verstanden

Gerson Kurz Gerson.Kurz at t-online.de
Thu Nov 7 19:07:52 EST 2002


Ich weiß, ich weiß, ihr stöhnt sicher jetzt: kann der Depp nicht die Finger
davon lassen, wenn er es nicht versteht? Warte es ab!

Also, ich habe das Programm (http://p-nand-q.com/python/out2xml.zip) jetzt
erstmal funktionsfähig, und mir folgendes  vermutlich fehlgeleitete
Verständnis erarbeitet.

# Zeichen sind jeweils zwei Byte lang (Little Endian)
UNICODE_ENCODING = "utf-16le"

# Zeichen sind normalerweise ein Byte lang, Sonderzeichen per
"Escapesequenz" auf mehrere Bytes verteilt.
UNICODE_ENCODING = "utf-8"

# Zeichen sind jeweils ein Byte lang, Interpretation erfolgt abhängig von
der Codepage. Wenn das Zeichen nicht in ein Byte (0..255) passt, gibt es
eine Exception.
UNICODE_ENCODING = "latin-1"

- Ein Unicodestring "weiß", daß in "Höher" das zweite Zeichen als "Kringel
mit zwei Punkten drüber" dargestellt werden soll.

- Es gibt nicht nur eine Abbildung "Kringel mit zwei Punkten drüber" als
Bytes.

- Deshalb muß ich encode() aufrufen, und erhalte dann aus dem "Wissenden
Unicodestring" einen Bytebatzen in diesem Encoding. Beispiel (und da, glaube
ich, habe ich es verstanden):

>>> test = u"ö"
>>> test
u'\x94'
>>> test.encode("utf-16le")
'\x94\x00'
>>> test.encode("utf-8")
'\xc2\x94'
>>> test.encode("latin-1")
'\x94'
>>> test.encode("ascii")
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
UnicodeError: ASCII encoding error: ordinal not in range(128)
>>>

Das erklärt meine Fragen 1 (der String *weiss nicht* welches Encoding er
hat), und 2 (weil das genau der Zweck von encode ist) und 3 (weil es eben
kein kanonisches Encoding gibt). Das erklärt auch, warum ich das Encoding
z.B. in XML Starttag angeben muß, weil sonst der Leser (Das ominöse Notepad)
nicht weiß, was er von z.B. '\xc2\x94' zu halten hat.

Juhu! Oder?





More information about the Python-de mailing list