UTF-8编码的CSV文件,在Office的Excel中直接打开往往不能正确的识别文件编码,当然,用libreoffice一般是可以正确提示编码并打开的。这样的CSV可能是以这样的方式生成的:
import csv
rows = [
['姓名', '住址'],
['张三', '李四'],
# ...
]
with open('test.csv', 'w', encoding='utf-8') as csvfile:
writer = csv.writer(csvfile)
for row in rows:
writer.writerow(row)
这里,主要的问题在于一个有关编码的细节,生成文件的编码需要修改一下,当然并不是说要改成其他的编码,比如GBK等,而是需要使用带有BOM的UTF-8编码,从而可以让Excel等软件可以正确的进行识别。代码如下
import csv
rows = [
['姓名', '住址'],
['张三', '李四'],
# ...
]
with open('test.csv', 'w', encoding='utf-8-sig') as csvfile:
writer = csv.writer(csvfile)
for row in rows:
writer.writerow(row)
如代码中所示,只有encoding修改为utf-8-sig就可以了。