Encoding cx\u冻结windows控制台编码错误

Encoding cx\u冻结windows控制台编码错误,encoding,cx-freeze,python-3.4,Encoding,Cx Freeze,Python 3.4,我有Python3.4脚本,它可以处理unicode字符、变音符号等。 该脚本在Mac和Windows上运行良好。 如果我将其冻结到windows可执行文件,请在windows上冻结 python cxfreeze verifier.py -cOO --target-dir verifier 并将尝试运行它,它将在执行输出时给我以下异常 Traceback (most recent call last): File "C:\Python34\lib\site-packages\cx_Fre

我有Python3.4脚本,它可以处理unicode字符、变音符号等。 该脚本在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格式执行所有控制台输出

我很乐意为您提供任何帮助


更新:发现可能与遇到的问题有关

请尝试在windows控制台中执行以下操作:

chcp 65001
set PYTHONIOENCODING=utf-8

如果Python决定您的控制台编码为cp866,则在打印unicode字符串时,它将尝试使用该编码。我认为有一些工作可以让Python在Windows控制台上使用unicode API,但它还没有登陆。同时,您可以直接将字节写入sys.stdout.buffer,前提是您知道正确的编码是什么。尝试该脚本时,您是在命令行中还是在某些IDE控制台(如PyDev、IDLE等)中运行它。?因为它们通常是utf-8,与Windows控制台相反。@Fenikso,我试过了,cygwin控制台支持unicode,Windows的PowerShell也支持unicode,我想,如果您使用python.exe按原样启动脚本,一切都会好起来的。问题只发生在冻结的脚本上。@ThomasK,如果我无法解决cx_冻结错误,也许我会尝试您的解决方案。如果您的控制台使用的是cp866,那么这些是您可以使用标准Python API打印的唯一字符。看一看,这可能对你有帮助。听起来这可能会在Python3.5中得到修复。