Python2写CSV无法MS Excel打开乱码

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()



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值