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

iso*_*man 3 python unicode excel utf-8

编辑:

如果我使用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)
Run Code Online (Sandbox Code Playgroud)

Mar*_*nen 5

使用Python 2解决方案unicodecsv.请注意,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'???'])
Run Code Online (Sandbox Code Playgroud)

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'???'])
Run Code Online (Sandbox Code Playgroud)


小智 5

在python3中,我只是这样做:

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

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


iso*_*man 4

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

\n\n
# -*- coding: utf-8-sig-*-\nimport unicodecsv as csv\nimport codecs\nimport sys\nreload(sys)\nsys.setdefaultencoding("utf-8-sig")\ndef write_csv(file,headers):\n\n\n    resultFile =codecs.open(file, "w+", "utf-8-sig")\n\n    #headers=[s.encode(\'utf-8\') for s in headers]\n    wr = csv.writer(resultFile, dialect=\'excel\',delimiter=";",encoding="utf-8-sig")\n    wr.writerow(headers)\n\n    resultFile.close()\n\nheaders=[""]\nheaders.append("Command")\nheaders.append("V\xc3\xa9rification")\nwrite_csv(r"C:\\Users\\ATHENA-HDA\\AppData\\Local\\Temp\\test2.txt",headers)\n
Run Code Online (Sandbox Code Playgroud)\n