【发布时间】:2014-01-20 21:41:37
【问题描述】:
我正在使用以下代码解压缩并保存一个 CSV 文件:
with gzip.open(filename_gz) as f:
file = open(filename, "w");
output = csv.writer(file, delimiter = ',')
output.writerows(csv.reader(f, dialect='excel', delimiter = ';'))
似乎一切正常,除了文件中的第一个字符出乎意料之外。谷歌搜索似乎表明这是由于文件中的 BOM 造成的。
我已经读过用 utf-8-sig 对内容进行编码应该可以解决这个问题。但是,添加:
.read().encoding('utf-8-sig')
到 csv.reader 中的 f 失败:
File "ckan_gz_datastore.py", line 16, in <module>
output.writerows(csv.reader(f.read().encode('utf-8-sig'), dialect='excel', delimiter = ';'))
File "/usr/lib/python2.7/encodings/utf_8_sig.py", line 15, in encode
return (codecs.BOM_UTF8 + codecs.utf_8_encode(input, errors)[0], len(input))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)
如何删除 BOM 并将内容保存为正确的 utf-8?
【问题讨论】:
标签: python csv byte-order-mark