在Excel中使用.csv
编码在python中创建csv
模块创建的utf-8
文件时,字符已损坏。
如何防止在Excel .csv
文件中出现此错误?
撰写u'\xe9'
(即'é'
)时,在'utf-8'
中,Excel会显示'ã©'
,就像它已从'latin-1'
编码进行某种解码一样:
print u'\xe9' # basic unicode string
é
u'\xe9'.encode('utf-8') #encode to write into .csv as utf-8
'\xc3\xa9'
u'\xe9'.encode('utf-8').decode('latin-1') # Example of incorrect decoding to unicode
u'\xc3\xa9'
print u'\xe9'.encode('utf-8').decode('latin-1') # print statement == Excel's faulty encoding
ã©
答案 0 :(得分:4)
当写入csv文件对象时,我发现通过在强制执行其他任何操作之前编写以下内容:
f.write(u'\ufeff'.encode('utf-8'))
其中f
是with open(filename, 'wb') as f:
根据Mark Ransom上面的评论:BOM专门告知Excel使用utf-8
编码
答案 1 :(得分:1)
Python有一个可以添加BOM字符的编解码器。 Excel需要此BOM字符来检测UTF-8。编解码器还将在解码时删除BOM:
>>> u'\xe9'.encode('utf-8-sig')
'\xef\xbb\xbf\xc3\xa9'
>>> u'\xe9'.encode('utf-8-sig').decode('utf-8')
u'\ufeff\xe9'
>>> u'\xe9'.encode('utf-8-sig').decode('utf-8-sig')
u'\xe9'