listctrl macht kein utf-8

Plattformunabhängige GUIs mit wxWidgets.
Antworten
rkruggel
User
Beiträge: 21
Registriert: Mittwoch 9. März 2005, 11:40
Wohnort: Altena, Westf.
Kontaktdaten:

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
cu
Roland
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
rkruggel
User
Beiträge: 21
Registriert: Mittwoch 9. März 2005, 11:40
Wohnort: Altena, Westf.
Kontaktdaten:

leider nein.

wx.SetDefaultPyEncoding("utf-8")

produziert den Fehler

UnicodeDecodeError: 'utf8' codec can't decode bytes in position 102-104: invalid data
cu
Roland
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
rkruggel
User
Beiträge: 21
Registriert: Mittwoch 9. März 2005, 11:40
Wohnort: Altena, Westf.
Kontaktdaten:

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'.
cu
Roland
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
rkruggel
User
Beiträge: 21
Registriert: Mittwoch 9. März 2005, 11:40
Wohnort: Altena, Westf.
Kontaktdaten:

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.
cu
Roland
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
rkruggel
User
Beiträge: 21
Registriert: Mittwoch 9. März 2005, 11:40
Wohnort: Altena, Westf.
Kontaktdaten:

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.
cu
Roland
Antworten