Problem mit Zeichenkodierung bei Verwendung von pyinstaller

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Hintergrund: Ich experimentiere z.Zt. mit verschiedenen Möglichkeiten von Python, um auszuloten, was geht und was nicht geht. Meine eigentliche Entwicklungsplattform ist Linux (mit KDE), zum Testen des Verhaltens unter Windows habe ich parallel eine Python-Installation unter Wine eingerichtet.

Ich habe eine kleine Tkinter Anwendung geschrieben, die - vereinfacht gesagt - zwei Textfenster enthält (Text-Widgets). In das eine Fenster gibt man einen Text ein, drückt einen Button, im anderen Fenster kommt der Text dann verändert wieder heraus. Das funktioniert auch wie es soll, also kein Tkinter-Problem.

Problematisch sind deutsche Umlaute, da sie außerhalb des 7-Bit-ASCII liegen und den Einsatz von Unicode erfordern. Konkret:

Linux-Version als py-Skript: Alles einwandfrei.
wine-Version als py-Skript: Alles einwandfrei.
Unter wine mit py2exe erzeugte exe-Datei unter wine ausgeführt: Alles einwandfrei.
Unter wine mit pyinstaller erzeugte exe-Datei unter wine ausgeführt: Problem mit Umlauten (sonst funktioniert es auch hier). Die Verarbeitung des eingegebenen Textes nach Knopfdruck wird nicht durchgeführt. Hat man die Konsole offen, gibt es eine Fehlermeldung bei der Zeichendekodierung:

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

Der Fehler betrifft die Zeile, in der der Text aus dem Eingabefenster ausgelesen wird:

Code: Alles auswählen

txt = unicode(self.txtOrig.get("1.0",tk.END))
Damit es keine Missverständnisse gibt: Es funktioniert in allen o.g. Fällen AUCH MIT UMLAUTEN einwandfrei, nur eben nicht mit der mit pyinstaller erzeugten exe-Datei.

Für hilfreiche Tipps wäre ich dankbar.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Nochmal nachgedacht, noch was probiert ...
... und selbst gelöst.

So funktioniert es auch mit der pyinstaller exe-Datei und den Umlauten:

Code: Alles auswählen

txt = self.txtOrig.get("1.0",tk.END)
if isinstance(txt,unicode):
    txt = txt.encode("iso-8859-15")
Antworten