Seite 1 von 1

listctrl macht kein utf-8

Verfasst: Sonntag 5. November 2006, 19:18
von rkruggel
Hallo,

muss ich dem listctrl einen besonderen parameter mitgeben damit er utf-8 akzeptiert und nicht mit einem Fahler aussteigt.

-->
UnicodeDecodeError: 'ascii' codec can't decode byte 0xfc in position 1: ordinal not in range(128)
--<

Ich benutze hier Linux, Debian

Re: listctrl macht kein utf-8

Verfasst: Sonntag 5. November 2006, 19:48
von gerold
rkruggel hat geschrieben:-->
UnicodeDecodeError: 'ascii' codec can't decode byte 0xfc in position 1: ordinal not in range(128)
--<
Hi rkruggel!

Vielleicht bringt dich dieser Thread weiter:
http://www.python-forum.de/post-47451.html#47451

mfg
Gerold
:-)

Verfasst: Sonntag 5. November 2006, 20:48
von rkruggel
leider nein.

wx.SetDefaultPyEncoding("utf-8")

produziert den Fehler

UnicodeDecodeError: 'utf8' codec can't decode bytes in position 102-104: invalid data

Verfasst: Montag 6. November 2006, 06:45
von gerold
Hi rkruggel!

Code: Alles auswählen

UnicodeDecodeError: 'ascii' codec can't decode byte 0xfc in position 1: ordinal not in range(128)

Code: Alles auswählen

UnicodeDecodeError: 'utf8' codec can't decode bytes in position 102-104: invalid data
Ich schließe jetzt einfach mal daraus, dass du keinen UTF8-String übergibst, sondern irgendetwas in die Richtung iso-8859-1 oder iso-8859-15.
Das wäre auch das (deutschsprachige) Standard-Encoding von Debian.

mfg
Gerold
:-)

Verfasst: Montag 6. November 2006, 10:05
von rkruggel
Die Daten kommen aus einer MySQL-DB. Die Tabellen/db stehen auf utf8-bin. Ein einfacher print zeigt mir für 'Lüdenscheid' 'L\xfcdenscheid'.

Verfasst: Montag 6. November 2006, 10:20
von sape
Eine blöde frage: Hast du die unicode Version von wxPython installiert? Mit unicode und wxPython hatte ich bisher keinerlei Probleme. Obs auch für Linux so eine Version gibt weiß ich nicht. Hab die Version für Windows.

lg

Verfasst: Montag 6. November 2006, 11:46
von gerold
rkruggel hat geschrieben:Die Daten kommen aus einer MySQL-DB. Die Tabellen/db stehen auf utf8-bin. Ein einfacher print zeigt mir für 'Lüdenscheid' 'L\xfcdenscheid'.
Hi rkruggel!

Das was du da zurück bekommst ist nicht "utf-8".

Code: Alles auswählen

>>> print repr(u"ü".encode("utf-8"))
'\xc3\xbc'
>>> print repr(u"ü".encode("iso-8859-15"))
'\xfc'
>>> 
mfg
Gerold
:-)

Verfasst: Montag 6. November 2006, 13:32
von rkruggel
Du hast recht.
Ich habe mich von der Einstellung in der db etwas in die irre führen lassen.

Es ist wirklich kein utf-8. Es ist iso-8859-1. Aber jetzt ist das Problem mit dem ListCtrl für mich mich unverständlicher.

Dein Beispiel liefert bei mir die gleichen Ergebnisse. Ich habe die komplette DB umgestellt nach iso-8859-1. Da Problem bleibt leider.

Verfasst: Montag 6. November 2006, 14:34
von gerold
rkruggel hat geschrieben:Ich habe die komplette DB umgestellt nach iso-8859-1. Da Problem bleibt leider.
Hi rkruggel!

Ich habe keine Erfahrung mit MySQL und Python, aber was ich soeben gelesen habe, deutet darauf hin, dass es bei "mysql-Python 1.2.1_p2" Probleme mit Umlauten gibt.

- http://sourceforge.net/project/showfile ... p_id=22307

- http://sourceforge.net/forum/forum.php? ... m_id=70461
- http://sourceforge.net/forum/forum.php? ... m_id=70461

Suche hier drinnen http://mysql-python.svn.sourceforge.net ... iew=markup doch mal nach den Wörtern "use_unicode" und "charset".

Ob das nachträgliche Ändern des Standardencodings von MySQL auch das tatsächliche Encoding der enthaltenen Daten ändert? -- Eher nicht!

Ich persönlich würde beim Verbinden das Flag "use_unicode" verwenden und beim Füllen der Liste, die Strings in das Encoding umwandeln, das auch vom Python-Modul verwendet wird und auch per ``wx.SetDefaultPyEncoding()`` eingestellt wurde.

Ungetesteter Pseudocode:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

import wx
import MySQLdb

wx.SetDefaultPyEncoding("iso-8859-1") 


conn = MySQLdb.connect(passwd = "pass", db = "dbname", use_unicode = True)

...

unicodestringvonderdatenbank = u"öäüß"

iso88591string = unicodestringvonderdatenbank.encode("iso-8859-1")
mfg
Gerold
:-)

Verfasst: Montag 6. November 2006, 14:40
von gerold
PS:
- Lesestoff: http://www.python-forum.de/topic-5095.html
- Auch wenn es sich hier um pySQLite dreht...: http://gelb.bcom.at/trac/misc/wiki/Tuto ... iteUmlaute

Verfasst: Montag 6. November 2006, 22:50
von rkruggel
Viel Stoff zu lesen.
Ich weis jetzt zumindestens wo ich was suchen muss. Das hilf schon mal weiter. Morgen mache ich mich da ran.

Ich danke dir für deine Hilfe.