Das deutsche Python-Forum

10 Jahre Diskussionen rund um die Programmiersprache Python
Aktuelle Zeit: Mittwoch 20. August 2014, 18:33

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Problem mit doppelt kodierten Daten
BeitragVerfasst: Mittwoch 18. Januar 2012, 15:16 
User

Registriert: Donnerstag 1. Oktober 2009, 16:17
Beiträge: 35
Hallo,
ich habe ein recht komplexes Python-Programm (SqlAlchemy/Elixir-Basis), dass auf eine MySQL-DB zugreift. Es ist eine rein interne Anwendung die ich in dieser Form etwa 10 Mal auf verschiedenen Rechnern in verschiedenen Büros installiert habe, unter Windows und Linux. Dabei gab es nie Schwierigkeiten. Die Datenbank wurde dabei mit einem Dump der Referenzinstallation gefüllt. Nun habe ich meinen eigenen Rechner von OpenSuse auf Ubuntu Oneiric (wg. dauernder Querelen mit KDE) umgestellt, und ich kriege es nicht mehr zu laufen.

Folgende Fehlermeldung kommt so oder ähnlich beim Zugriff:
  File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.6.7-py2.7.egg/sqlalchemy/processors.py", line 69, in process
    return decoder(value, errors)[0]
  File "/usr/lib/python2.7/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe4 in position 8: invalid continuation byte
Highlighting by GeSHi


Nach langer Suche habe ich folgendes feststellen können:
1. Die vorhandenen Daten in der DB sind definitiv korrekt utf-8 kodiert, bei Zugriff darauf erfolg o.g. Fehlermeldung
2. Bei Neueingabe von Daten in die DB sind diese innerhalb der DB doppelt utf-8 kodiert, bei Zugriff darauf erfolgt die Anzeige korrekt (!) ohne Fehlermeldung
3. Lasse ich das Python-Programm auf meinem Rechner laufen, greife aber dabei auf die Referenz-DB auf einem entfernten Rechner zu, kommt ebenfalls die Fehlermeldung, obwohl das selbe Programm auf dem Referenzrecher funktioniert.
4. Ich habe verschiedene Python-Versionen und sqlalchemy-Versionen durchprobiert, immer das gleiche Ergebnis, nämlich die obige Fehlermeldung, wenn auf vorhandene Daten zugegriffen wird

Mein Verdacht: irgendwas passiert mit den Daten zwischen dem Ausgang MySQL und dem Eingang bei SqlAlchemy bzw. umgekehrt, es erfolgt nämlich eine weitere, zusätzliche utf-8 kodierung bzw. dekodierung. Und es könnte was mit Ubuntu Oneiric zu tun haben, denn das selbe Python-Programm läuft ohne ein Byte Änderung auf anderen Rechnern mit Windows und Linux in verschiedenen Versionen problemlos. Mein Ubuntu ist auch voll auf UTF-8 eingestellt, soweit ich das sehen kann.

Kann mir jemand erklären, wass genau passiert zwischen der Datenausgabe bei MySQL und dem Eingang bei Python? Nimmt MySQLdb evtl. Änderunen vor, oder werden die Daten da einfach nur durchgereicht? Wo könnte die zusätzliche kodierung/dekodierung stattfinden? :K

Danke für die Hilfe

Hase


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Problem mit doppelt kodierten Daten
BeitragVerfasst: Mittwoch 18. Januar 2012, 21:19 
User

Registriert: Mittwoch 17. Oktober 2007, 22:40
Beiträge: 939
Hallo,

Vermutung: Schau dir mal an, was für ein Transfer-Encoding bei MySQL unter Suse eingestellt ist. Bei Debian / Ubuntu ist es nämlich Laitn-1. Wenn's unter Suse was anderes ist könnte das eine Ursache sein.

Gruß, noisefloor


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Problem mit doppelt kodierten Daten
BeitragVerfasst: Donnerstag 19. Januar 2012, 11:32 
User

Registriert: Donnerstag 1. Oktober 2009, 16:17
Beiträge: 35
Problem gelöst, wenn auch nicht 100% verstanden.

Ich denke weiterhin, das MySQLdb der Schuldige ist.

Das Problem kann durch explizite Angabe des Encodings in SqlAlchemy abgestellt werden. SqlAlchemy reicht diesen Parameter dann an MySQLdb weiter. Ich habe in meiner Konfigurationsdatei die Zeile:

sqlalchemy.dburi="mysql://username:passwd@localhost:3306/mydb"
Highlighting by GeSHi


in

sqlalchemy.dburi="mysql://username:passwd@localhost:3306/mydb?charset=utf8"
Highlighting by GeSHi


geändert.

H.


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Deutsche Übersetzung durch phpBB.de