如果我使用notepad ++打开csv文件,建议正确显示特殊字符。将csv文件导入excel时,它们也会正确显示。 如何生成由excel打开时正确显示的csv文件,因为文件导入不是用户的选项
我正在生成一个使用Excel处理的csv文件。 使用excel打开文件时,“é”等特殊字符无法正确显示
这是我用来生成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)
答案 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