У меня есть скрипт Python 3.4, который имеет дело с символами Юникода, диакритическими знаками и т. Д. Скрипт отлично работает на Mac и Windows. Если я замораживаю его в исполняемый файл Windows (зависает в Windows!)
python cxfreeze verifier.py -cOO --target-dir verifier
и попытаюсь запустить его, это даст мне следующее исключение при выполнении вывода
Traceback (most recent call last):
File "C:\Python34\lib\site-packages\cx_Freeze\initscripts\Console.py", line 27, in <module>
exec(code, m.__dict__)
File "C:\Users\me\Desktop\verifier\verifier.py", line 520, in <module>
main()
File "C:\Users\me\Desktop\verifier\verifier.py", line 484, in main
ConsoleManager.dynamic_print(MSG_VERIFYING_FILE.format(relativePath))
File "C:\Users\me\Desktop\verifier\verifier.py", line 230, in dynamic_print
ConsoleManager.print(message, end='\r')
File "C:\Users\me\Desktop\verifier\verifier.py", line 226, in print
print(message, end=end)
File "X:\Python34-x32\lib\encodings\cp866.py", line 19, in encode
UnicodeEncodeError: 'charmap' codec can't encode character '\u0456' in position 16: character maps to <undefined>
Интересно, почему «cp866»? Скрипт работает исключительно с utf-8 и никаких ссылок на кодировку cp866 не было! Похоже, cx_Freeze пытается вывести поток utf-8 на консоль, например поток cp866.
Как я могу указать сценарию cx_Freeze exe-creator выполнять весь вывод консоли в utf-8?
Буду рад любой помощи.
ОБНОВЛЕНИЕ: найдено http://sourceforge.net/p/cx-freeze/mailman/message/24126644/ возможно дело в возникшей проблеме
sys.stdout.buffer
, если знаете, какая кодировка правильная. - person Thomas K   schedule 24.09.2014sys.stdout.buffer.write(message.encode('utf-8'))
пишет поток utf-8, но выходная кодировка все еще cp866, насколько я понимаю, и мы видим странные символы cp866 на выходе - person kernelbug   schedule 25.09.2014