将utf-8写入Excel CSV

时间:2015-07-20 03:21:46

标签: python csv unicode utf-8 character-encoding

在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
ã©

2 个答案:

答案 0 :(得分:4)

当写入csv文件对象时,我发现通过在强制执行其他任何操作之前编写以下内容:

f.write(u'\ufeff'.encode('utf-8'))

其中fwith 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'