Stefan Meretz
Fri, 17 Nov 2006 05:14:02 -0800
On 2006-11-17 09:10, Thomas Kalka wrote: > 'öööö' ist in unicode immer u'xf6xf6xf6xf6' > siehe http://www.utf8-zeichentabelle.de/
Na, vormails hast du mir noch erklärt, dass das kein utf8 ist, weil jenseits von 127;-) Aber ok, inzwischen habe ich verstanden: f6 ist der "Codepoint", also die Position in der utf8-Tabelle. Das heißt, es gibt eine Art doppeltes Mapping: Zeichen => Codepoint (Decoding) Codepoint => Bytefolge (Encoding) wobei gilt: Decoding: Umwandlung externe => interne Repräsentation Encoding: Umwandlung interne => externe Repräsentation Die interne Repräsentation ist der Codepoint, der auf den eigentlichen Codewert als Bytefolge verweist. Wie der interpretiert wird, hängt von den Einstellungen des jeweiligen "Geräts" ab. > Je nach Setting der Variable LANG wird das dann beim Ausgeben anders > gerendert: > (in einem UTF-8 Terminal, ubuntu-box): > > [EMAIL PROTECTED]:~$ export LANG=POSIX > [EMAIL PROTECTED]:~$ python -c "import sys; print sys.stdout.encoding, > u'xf6'" ANSI_X3.4-1968 Traceback (most recent call last): > File "<string>", line 1, in ? > UnicodeEncodeError: 'ascii' codec can't encode character u'xf6' in > position 0: ordinal not in range(128) > > [EMAIL PROTECTED]:~$ export LANG=de_DE > [EMAIL PROTECTED]:~$ python -c "import sys; print sys.stdout.encoding, > u'xf6'" ISO-8859-1 ? > > [EMAIL PROTECTED]:~$ export LANG=de_DE.utf8 > [EMAIL PROTECTED]:~$ python -c "import sys; print sys.stdout.encoding, > u'xf6'" UTF-8 ö Genau! > Das Problem bei Dir scheint aber nicht Python zu sein, sondern die > Verbindung von MySQL zu Python, > da da doppelt encodierte UTF-8 Strings ankommen. Da bin ich jetzt auch bei meinen Nachforschungen gelandet, letztlich bei der Python MySQLdb. Die ist nämlich auf der Produktionsmaschine ein Tick älter: Laptop: 1.2.1_p2 Server: 1.2.1g2 Das ist letztlich auch der einzige Unterschied zwischen den beiden Rechnern. > Es sieht so aus, dass MySQL in UTF8 sendet, jepp > Python davon ausgeht, dass das ISO8859 ist und das dann zu falschen > Unicode-Strings encoded. Ja, so sieht es aus. MySQLdb ist jetzt mein Kandidat;-) Später, jetzt erstmal wieder ins Bett... Danke für deine instruktiven Erklärungen! Ciao, Stefan -- Start here: www.meretz.de