问题与UTF- / csv文件的Excel编码

编辑:

如build议特殊字符显示正确,如果我使用记事本+ + +打开CSV文件。 当我将csv文件导入到excel中时,它们也显示正确。 如何生成一个csv文件,当通过excel打开时显示正确,因为文件导入不是用户的选项

我正在生成正在使用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) 

使用unicodecsv Python 2解决scheme。 请注意, unicodecsv的文档说应该以二进制模式打开模块( wb )。 确保编写Unicodestring。 #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解决scheme。 #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'中国人']) 

我使用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)