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-8
import csv
csvfh = 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()