dev  

Encoding-Problem (Re: [ot:dev] Es rennt:-))

Stefan Meretz
Wed, 15 Nov 2006 07:44:43 -0800

On 2006-11-15 14:48, Thomas Kalka wrote:
> Glückwünsch !

:-)

> Erwäge nun, auch unter Python statt PHP weiterzumachen,
> lese gerade die Docs zu Turbogears, Mochikit etc etc.
> SqlAlchemy scheint sehr brauchbar zu sein.

Das wäre prima, dann könnten wir uns gut austauschen.
SQLAlchemy ist definitiv sehr gut. 

> Zu dem Problem mit der Kodierung:
> es sieht so aus, als ob UTF-8 nochmal nach UTF-8 kodiert würde.
> Kommen die Texte so schon aus der Datenbank, oder macht der Webserver
> noch mal eine Konvertierung ?

Der Webserver ist neutral. Es sieht merkwürdig aus und scheint mit der 
DBAPI MySQLdb zu tun zu haben. Eine ausführliche Beschreibung habe ich 
an die TurboGears-Liste gepostet, ist leider noch nicht im Web zum 
referenzieren.

Daraus dieses Snippet:

1st machine: Select from tg-admin:
>>> from model import *
>>> t = Testtable.selectone()
>>> t.test
u'xf6xf6xf6xf6'
>>> print t.test
öööö

2nd machine: Select from tg-admin (don't know, why looks different):
In [1]: from model import *
In [2]: t = Testtable.selectone()
In [3]: t.test
Out[3]: u'xc3xb6xc3xb6xc3xb6xc3xb6'
In [4]: print t.test
öööö

Viermal ö deswegen, weil es in der Liste hieß, dass MySQL in einem 
varchar(4)-Feld bei einem Unicode-String nur zwei Zeichen speichern 
würde, weil "Unicode" das in zwei Byte darstellt. Also auf jeden Fall 
speichert MySQL öööö in einem varchar(4) Feld - utf8 ist doch 
ein "Einbyte-Encoding", oder? Und utf16 ein "Zweibyte-Encoding".

Die Ausgabe der 1st machine liefert auf meinem Laptop eine perfekte 
Darstellung, die Ausgabe der 2nd Maschine liefert das, was ihr im Web 
seht. Das erste sieht aus wie utf8-encodiert, das zweite wie utf16. 
Weil: eine doppelte Kodierung - was soll das sein? utfx ist ja kein 
Zeichensatz, sondern nur ein Interpretationsschema. Aber ich gebe zu, 
dass ich das nicht so ganz blicke.

Auf jeden Fall ist die Python-Console so nett, beide 
Stringrepräsentationen gleich zu interpretieren. Nur in der Webseite 
passt es nicht mehr, weil die ja eindeutig utf8 ist.

In der TG-Liste merkern viele über MySQL: Keine Datenbank würde solche 
Encoding-Probleme machen wie MySQL.

Ciao,
Stefan

-- 
Start here: www.meretz.de