2016-04-03 10 views
0

Ich habe ein Python-Skript geschrieben (und voll funktionsfähig) auf Debian. Jetzt möchte ich das Skript mit cx_Freeze für die Verteilung an Windows-Benutzer einfrieren und zu diesem Zweck habe ich ein Win XP-System in virtualbox mit Python 3.4.4 läuft auf ihm ausgeführt. Nach dem Einfrieren des Skripts und dem Versuch, die resultierende Exe auszuführen, erhalte ich folgende Fehlermeldung:Python 3.4.4/Win XP: Codierung Fehler

"UnicodeEncodeError: 'Charmap' Codec kann Zeichen in Position 11-14 nicht codieren: Zeichenkodierung zu (<) undefiniert (>) ".

Die Zeichen in der Ausgabe sind diese:

ту╧╙

Die Zeichen sind ein Teil der Syntax einer FDF-Datei, die die Python-Skript erzeugt. Es kam auch heraus, dass sogar das ursprüngliche Python-Skript vor dem Einfrieren das gleiche Problem hat; Ich verstehe, dass Pythons Stdout cp852 ist, während der Befehlszeileninterpreter des Systems mit cp1250 arbeitet. Ich habe verschiedene Wege versucht, PYTHONIOENCODING zu ändern, aber bis jetzt vergeblich, es führt nur zu noch mehr Fehlermeldungen. Kann ich etwas tun, um das zu beheben?

Antwort

0

Legen Sie die Codierung der von Ihnen generierten Datei fest? Wenn nicht, wird standardmäßig die Systemcodierung verwendet, was Ihr Problem erklären könnte. So können Sie die Ausgabe-Datei wie folgt öffnen (Ersatz utf8 durch das, was Sie wirklich brauchen):

stream = open('filename', 'w', encoding='utf8') 

Oder vielleicht sollten Sie tatsächlich Ihre Ausgabedatei im Binärmodus öffnen. Es ist merkwürdig, dass eine Reihe von Unicode-Zeichen, die zwischen Kyrillisch und Box-Zeichnung variieren, tatsächlich die Syntax für etwas ist - wahrscheinlich, was Sie brauchen, ist der Byte-Wert dieser Zeichen in einer bestimmten 8-Bit-Kodierung.

+0

Vielen Dank für den Tipp, es löst das Problem. Interessanterweise ist das, was der Beginn einer FDF-Datei wie folgt aussieht:% FDF-1.2 % ту╧╙ 1 0 obj << /FDF << /Felder [ << /V (Pstcd) /T (Postleitzahl) – bob