繁体   English   中英

excel csv 文件上的 UTF-/ 编码问题

[英]Issue with UTF-/ encoding on csv file for excel

编辑:

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

使用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'中国人'])

在python3中,我只是这样做:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM