在Excel的csv文件上使用UTF- /编码问题

时间:2016-06-24 13:53:51

标签: python excel unicode utf-8

编辑:

如果我使用notepad ++打开csv文件,建议正确显示特殊字符。将csv文件导入excel时,它们也会正确显示。 如何生成由excel打开时正确显示的csv文件,因为文件导入不是用户的选项

我正在生成一个使用Excel处理的csv文件。 使用excel打开文件时,“é”等特殊字符无法正确显示 enter image description here

这是我用来生成csv文件的poc

# -*- coding: utf-8 -*-
import unicodecsv as csv
import codecs
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
def write_csv(file,headers):


    resultFile =codecs.open(file, "w+", "utf-8")

    #headers=[s.encode('utf-8') for s in headers]
    wr = csv.writer(resultFile, dialect='excel',delimiter=";",encoding="utf-8")
    wr.writerow(headers)

    resultFile.close()

headers=[""]
headers.append("Command")
headers.append("Vérification".encode('utf-8'))
write_csv(r"C:\test2.csv",headers)

3 个答案:

答案 0 :(得分:5)

使用unicodecsv的Python 2解决方案。请注意,unicodecsv的文档说模块应该以二进制模式(wb)打开。确保编写Unicode字符串。 #coding需要支持源文件中的非ASCII字符。确保以UTF-8保存源文件。

#coding:utf8
import unicodecsv

with open('test.csv','wb') as f:
    # Manually encode a BOM, utf-8-sig didn't work with unicodecsv
    f.write(u'\ufeff'.encode('utf8'))
    w = unicodecsv.writer(f,encoding='utf8')
    # Write Unicode strings.
    w.writerow([u'English',u'Chinese'])
    w.writerow([u'American',u'美国人'])
    w.writerow([u'Chinese',u'中国人'])

Python 3解决方案。 #coding在这里是可选的,因为它默认为UTF-8。只需确保以UTF-8保存源文件。不再需要unicodecsv。内置csv正常工作。 csv文档说明要使用newline=''打开文件。

#coding:utf8
import csv

with open('test.csv','w',newline='',encoding='utf-8-sig') as f:
    w = csv.writer(f)
    # Write Unicode strings.
    w.writerow([u'English',u'Chinese'])
    w.writerow([u'American',u'美国人'])
    w.writerow([u'Chinese',u'中国人'])

答案 1 :(得分:3)

我使用UTF-8 BOM编码解决了这个问题。

# -*- coding: utf-8-sig-*-
import unicodecsv as csv
import codecs
import sys
reload(sys)
sys.setdefaultencoding("utf-8-sig")
def write_csv(file,headers):


    resultFile =codecs.open(file, "w+", "utf-8-sig")

    #headers=[s.encode('utf-8') for s in headers]
    wr = csv.writer(resultFile, dialect='excel',delimiter=";",encoding="utf-8-sig")
    wr.writerow(headers)

    resultFile.close()

headers=[""]
headers.append("Command")
headers.append("Vérification")
write_csv(r"C:\Users\ATHENA-HDA\AppData\Local\Temp\test2.txt",headers)

答案 2 :(得分:0)

在python3中,我只是这样做:

with open(file, "w+", encoding='utf-8-sig') as f:
                f.write("Vérification")

很简单,对吧? :) 您可以在中搜索“ utf-8-sig” the python docs