Python2写CSV无法MS Excel打开乱码

来源:互联网 发布:小学生必知课外知识 编辑:程序博客网 时间:2024/05/22 10:44

Python2处理汉字一直是个很让人头疼的问题。

首先,要在程序开头加上如下一行,否则汉字变乱码;

#-*- coding: utf-8 -*-

其次,处理汉字字符串时候,有时候需要 str.encode("utf-8") 转码或者先解码再转码 str.decode("GBK").encode("utf-8");

然后,真的要写带汉字的文件了,直接write出来的貌似也不能直接看懂... 需要引入其它包

import codecs# # your functions# ......#fh = codecs.open("yourfile", "w", "utf-8")fh.write(filecontent)fh.close()

最后,奇葩的事情在MS Excel里出现了!

本来很简单一件事,写一个CSV(Comma-Separated Values)文件,用Excel打开。

直接codecs写的文件,用MS Excel打开时候会提示格式不对,任性打开也会是汉字变乱码。但是同一个文件在记事本、Editplus、UltraEdit甚至iOS的Numbers里打开都是正常的。

核心问题是需要先写一个文件头,u"\ufeff"。然后,该怎么办怎么办。

三种解决方法,方法一:还是用codecs

import codecs# # your functions# 先把csv文件内容按照“逗号分隔,换行回车”写好# ......fh = codecs.open("yourfile.csv","w","utf-8")fh.write(u"\ufeff")fh.write(csvstr)fh.close()# Done

方法二:不引用额外包,直接write

# # your functions# 先把csv文件内容按照“逗号分隔,换行回车”写好# ......#fh = open("yourfile.csv", "w")fh.write(u"\ufeff") #某些系统中需要改成 fh.write(u"\ufeff".encode('utf-8'))fh.write(csvstr.encode("utf-8")) #简单粗暴地直接所有都转码。fh.close()

这样处理,不会有问题了。生成的文件MS Excel直接打开,汉字准确无误。


方法三:直接用CSV模块
#coding=utf-8import csvcsvfh = open('test1.csv', 'w')csvfh.write(u"\ufeff".encode("utf-8"))w = csv.writer(csvfh)w.writerow(["编号","用例","结果"])content = [    ('1','试验1','通过'),    ('2','试验2','失败')]w.writerows(content)csvfh.close()



1 0
原创粉丝点击