2016-04-03 3 views
0

У меня есть скрипт python, написанный (и полностью работающий) на debian. Теперь я хотел бы заморозить скрипт cx_Freeze для распространения среди пользователей Windows, и для этой цели у меня есть система win xp, работающая в virtualbox с установленным на ней python 3.4.4. Однако, после замораживания скрипта и попытки запустить полученный exe, я получаю следующее:Python 3.4.4/win xp: ошибка кодирования

«UnicodeEncodeError: кодек charmap не может кодировать символы в позиции 11-14: символьные карты (<) undefined (>)».

Символы в вопросе таковы:

ту╧╙

Символы являются частью синтаксиса файла FDF, который генерирует сценарий питона. Выяснилось также, что даже исходный сценарий python перед замораживанием имеет ту же проблему; Я понимаю, что stdout python - cp852, в то время как интерпретатор командной строки системы работает с cp1250. Я пытаюсь по-разному изменить PYTHONIOENCODING, но до сих пор не помог, это только приводит к еще большему количеству сообщений об ошибках. Я могу что-то сделать, чтобы это исправить?

ответ

0

Вы задаете кодировку создаваемого вами файла? Если нет, по умолчанию будет использоваться системная кодировка, и это может объяснить вашу проблему. Таким образом, вы можете открыть выходной файл как это (заменить utf8 на то, что вы на самом деле нужно):

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

Или, может быть, вы должны действительно открыть выходной файл в двоичном режиме. Кажется странным, что строка символов Юникода, различающаяся между кириллицей и рисунком коробки, фактически будет синтаксисом для чего-то - возможно, вам нужно это байт-значение этих символов в определенной 8-битной кодировке.

+0

Благодарим за отзыв, и это решает проблему. Интересно, что это то, что начало файла FDF выглядит следующим образом:% FDF-1,2 % ту╧╙ 1 0 OBJ << /FDF << /Поля [ << /V (Pstcd) /T (почтовый индекс) – bob