UnicodeDecodeError by py2exe.

Plattformunabhängige GUIs mit wxWidgets.
Antworten
zianou
User
Beiträge: 6
Registriert: Freitag 19. Oktober 2012, 19:46

Hallo,

ich habe ein kleine Tool mit wxpython entwickelt und es funktioniert fehlerfrei. Ich habe den Script mit py2exe konvertiert und beim Starten des exe ist folgende Fehler aufgetaucht:

Code: Alles auswählen

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 7219: ordinal not in range(128) 
der Zeil bei dem das Problem auftaucht sieht so aus:

Code: Alles auswählen

line_no_12 = [Lines.index(x) for x in Lines if ('<PORT format-rev="1" id="' + BUS_LIST[0] + '"' + ' toolId="VECTOR-HW01" xsi:type="port">') in x][0] + 1
BUS_LIST ist eine Liste von Strings.

kann man das irgendwie lösen?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo,

ich würde erstmal die ganze XML-Verarbeitung richtig programmieren. Was du da, basierend auf einfachen Textoperationen, gebaut hast, steht auf extrem wackeligen Beinen. Extrem fehleranfällig, nicht flexibel oder erweiterbar, kaum wartbar und bei den kleinsten Änderungen wird dir alles zusammenbrechen. Falls zum Beispiel mal Daten in anderer Codierung vorliegen als du erwartest. Verwende besser gleich lxml und oder setze auf XPath. Weniger Code, robust, weniger Fehler, wartbar und leicht anpassbar. Also nur Vorteile gegenüber deinem Code. Erst dann solltest du dich um Codierungsfehler in der XML-Verarbeitung kümmern, falls es die dann überhaupt noch gibt.
Das Leben ist wie ein Tennisball.
zianou
User
Beiträge: 6
Registriert: Freitag 19. Oktober 2012, 19:46

@Eydu: ich benutze eigentlich xml.dom als XML-Parser. der Zeil war nur optional in meinem Code. Aber jetzt habe ich das Problem gelöst, in dem ich die Zeile zu UTF-8 decodiere und zu Latin-1 encodiere.

Code: Alles auswählen

x = "Hallo"
x = x.decode('utf-8').encode("latin-1")
das hat mindestens bei mir jetzt funktioniert.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Das macht den Code jetzt nicht unbedingt vertrauenswürdiger. Deine Lösung besteht darin, dass du einfach noch mehr Annahmen über die vorliegenden Daten triffst. Das muss in deinem Szenario nicht unbedingt falsch sein (ich weiß ja nicht, wo die Daten herkommen), aber eine saubere Lösung ist das nicht.
Das Leben ist wie ein Tennisball.
zianou
User
Beiträge: 6
Registriert: Freitag 19. Oktober 2012, 19:46

@Eydu: da bin ich voll deine Meinung, deswegen werde ich versuchen eine andere Lösung zu finden. Danke.

P.S: um keine Probleme mit deutsche Umlaute zu bekommen, muss man hier statt "UTF-8" "iso-8859-1" benutzen.

Viele Grüße
Antworten