这是最近碰到的问题,总结一下,希望有大牛帮助指正
写入到CSV文件,设置文本的格式为gbk格式
- 在文件开头,设置成gbk格式
import os,sys,re,csv
reload(sys)
sys.setdefaultencoding('gbk')
- 写入csv文件时
csvFile=open(dir+'test.csv','wb')
csvFile.write('\xEF\xBB\xBF') #左边这个很关键,否则会乱码
读取CSV文件,设置文本的格式为utf8格式
- 在文件开头,设置成utf8格式
reload(sys)
sys.setdefaultencoding('utf-8')
- 读取csv文件时,要设置编码格式,进行数据库读写时非常重要
with open('./drugDatabase.csv','rb') as c:
csvfile=csv.reader(c,delimiter=",",quotechar='"')
for row in csvfile:
test=row[0].decode("gbk").encode("utf-8")
一些解释
- py文件默认是ASCII编码,需要在代码文件的第一行或第二行添加编码指示
# coding=utf-8
- 虽然可能显示出来一样 ,unicode和str是两种格式
- 用 u'汉字' 构造出来的是unicode类型,不用的话构造出来是str类型。
str的编码是与系统环境相关的,一般就是sys.getfilesystemencoding()
得到的值 - unicode和str的互相转换
- unicode是一个内置函数,第二个参数指示源字符串的编码格式。
- decode是任何字符串的方法,将字符串转换成unicode格式,参数为源字符串的编码格式。 encode也是任何字符串具有的方法,将字符串转换成指定的格式。
- 所以从unicode转str,要用encode方法
- 从str转unicode,所以要用decode方法
- 例子
u=u'unicode编码文字'
g=u.encode('gbk') #转换为gbk格式
print g #此时为乱码,因为当前环境为utf-8,gbk编码文字为乱码
str=g.decode('gbk').encode('utf-8') #以gbk编码格式读取并转换为utf-8格式输出
print str #正常显示中文
g.decode('gbk','ignore').encode('utf-8′) #这个是安全的方法,以gbk编码读取(当然是读取gbk编码格式的文字了)并忽略错误的编码