【发布时间】:2014-06-24 14:36:36
【问题描述】:
我在 Python 3 中编写了一个脚本,该脚本生成了一个 CSV 文件,它可以从控制台或 Pycharm IDE 运行 .py 文件。输出文件的编码是正确的。我的语言环境设置是:
>>> locale.getpreferredencoding()
'cp1252'
然后我在 Win 7 中用 Py2exe 将它打包到一个可执行文件中。它可以工作,但是输出的 CSV 文件的编码不正确,它是用 UTF-8 编码的,并且像 á é í ó ú ñ 这样的字符无法正确显示在 Excel 中。
代码
with open('temp_gesfincas.csv', newline='') as infh, \
open('output_gesfincas.csv', 'w', encoding='cp1252', newline='') as outfh:
reader = csv.reader(infh, delimiter=';')
writer = csv.DictWriter(outfh, fields, dialect='spanish')
writer.writeheader()
row = {}
for linea in reader:
print(linea)
key = linea[0]
try:
value = linea[1]
except IndexError:
value = ''
continue
if key in row:
writer.writerow(row)
row = {}
row[key] = value
if row:
writer.writerow(row)
【问题讨论】:
-
你用记事本++检查过文件吗?也许您找不到这些字符的原因是 Excel 的错误?我以前遇到过这种情况。使用 Notepad++ 的 hex 插件检查文件中的字节。
-
你能给我们看看实际的代码吗?你是怎么打开文件的?
open()使用系统默认编码,除非您指定不同的编解码器。您是否还可以显示文件中生成的实际输出(最好将其打开为二进制文件,然后向我们显示有问题的行的repr())。 -
"spanish"不是dialect的有效参数。 -
@Alpay 是的,我已经用 Notepad++ 检查了文件。单词“Código”的 Hex 插件的输出是:
43 c3 b3 64 69 67 6f。 @MartijnPieters 显示以二进制打开的 repr() 的输出:b'C\xc3\xb3digo;Nombre;Direcci\xc3\xb3n;Poblaci\xc3\xb3n' -
@BurhanKhalid 是的,但我已经注册:
csv.register_dialect('spanish', delimiter=';')以便使用带有 ';' 的 DictWriter分隔符。
标签: python csv python-3.x character-encoding py2exe