错误的编码由py2exe脚本生成的csv文件

时间:2014-06-24 14:36:37

标签: python csv python-3.x character-encoding py2exe

我已经在Python 3中编写了一个生成CSV文件的脚本,它可以在控制台或Pycharm IDE中正常运行.py文件。输出文件的编码是正确的。我的区域设置是:

>>> locale.getpreferredencoding()
'cp1252'

然后我将它打包在Win 7中的Py2exe可执行文件中。它可以工作,但输出CSV文件的编码不正确,用UTF-8编码,像{{{{{{{ 1}}无法在Excel中正确显示。

代码

á é í ó ú ñ

2 个答案:

答案 0 :(得分:0)

我不确定哪些编码py2exe支持,但为了正确支持unicode字符,编码包需要包含在.exe中。

要包含此选项,请添加选项--packages encodings

答案 1 :(得分:0)

解决了!

首先,我将脚本的编码设置为# -*- coding: cp1252 -*-。生成的字符已更改,但也是错误的。

由于我已阅读此https://groups.google.com/forum/#!topic/pythonhispano/gV3kvSJY75k,因此我更改了特殊注释行:

 # -*- coding: cp1252 -*-

通过这一行:

# -*- coding: 850 -*-

为什么呢?回答自己:

虽然Windows使用cp1252编码,如下所示:

>>> locale.getpreferredencoding()
'cp1252'

Windows cmd的控制台使用cp850,您可以看到:

C:\Users\Trimax\Dev\Tests>chcp
Active code page: 850

好吧,在必须用于'编译'的setup.py脚本中,您可以使用脚本的文件名设置控制台或windows参数,具体取决于您的操作(控制台程序或GUI程序)。如果在setup.py文件中将'console'作为对象,则使用的编码为850,因此您必须将脚本的编码设置为# -*- coding: 850 -*-