Stefan Meretz
Thu, 16 Nov 2006 01:34:00 -0800
On 2006-11-15 18:36, Thomas Kalka wrote: > > u'xf6xf6xf6xf6' > > Das ist nicht utf8, bei UTF8 gibt es keine Zeichen, die größer sind > als 127. Siehe http://de.wikipedia.org/wiki/UTF-8 > UTF-8 ist variabel langes Encoding (bis 4 Byte pro Zeichen).
Ok.
> Was sagt auf dieser Maschine und der anderen
> $$ locale
M1:
LANG=de_DE.UTF-8
LANGUAGE=de_DE:de:en_GB:en
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=
M2:
LANG=de_DE
LANGUAGE=en_DE:en_US:en_GB:en
LC_CTYPE="de_DE"
LC_NUMERIC="de_DE"
LC_TIME="de_DE"
LC_COLLATE="de_DE"
LC_MONETARY="de_DE"
LC_MESSAGES="de_DE"
LC_PAPER="de_DE"
LC_NAME="de_DE"
LC_ADDRESS="de_DE"
LC_TELEPHONE="de_DE"
LC_MEASUREMENT="de_DE"
LC_IDENTIFICATION="de_DE"
LC_ALL=
Sieht eigentlich bei M1 (mein Laptop) besser aus. Ok, dort ist das
Ergebnis der App im Browser dann auch richtig.
> Die erste Maschine (Dein Laptop) scheint gar nicht UTF-8 zu
> produzieren sonder ganz normales ISO8irgendwas
Doch, der sieht gut aus. Dein Hinweis auf die 7-Bit-Codierung der
ASCII-Zeichen in einem Byte und aller anderen Zeichen in zwei und mehr
Bytes leuchtet mir ein. Dennoch: Auf _beiden_ Maschinen bekomme ich das
hier auf der Python-Console:
>>> unicode('ö', 'utf8')
u'xf6'
Oder, was das gleiche ist:
>>> 'ö'.decode('utf8')
u'xf6'
Verstehe ich dann nicht. Wie ist es bei dir?
> > In der TG-Liste merkern viele über MySQL: Keine Datenbank würde
> > solche Encoding-Probleme machen wie MySQL.
>
> Solche Erfahrungen habe ich bisher nicht gemacht.
> Du kannst in MYSQL für jedes Attribut und jede Tabelle die Collation
> einstellen.
> Dann noch für die Verbindung.
>
> Um von der lokalen Einstellung für Zeichenkodierung unabhängig zu
> sein, sende ich nach dem Aufbau
> einer MySQL-Connection
> mysql_query("SET NAMES 'utf8'",$DB);
> mysql_query("SET CHARACTER SET utf8");
Ok, ich starte den Server mit: mysqld_safe --character-set-server=utf8
Dann gucke auf der Mysql-Console, ob alles ok:
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
Aber es in der App zu setzen macht es in der Tat von der Config
unabhängiger.
> Ich schlage vor, zuerst ohne Python mit der Console (mysql) zu
> probieren.
Hab ich, das geht auf beiden Maschinen.
mysql> select * from testtable;
+--------+----------+
| pkey | test |
+--------+----------+
| first | öööö |
+--------+----------+
Im nächsten Schritt will ich mal die locales auf dem Server auf utf-8
setzen. Dazu muss ich aber erst mal meinen Sponsor fragen:-)
Danke!
Ciao,
Stefan
--
Start here: www.meretz.de