问题提出:
有时候我们采集网页,处理完毕后将字符串保存到文件或者写入数据库,这时候需要制定字符串的编码,如果采集网页的编码是gb2312,而我们的数据库是utf-8的,这样不做任何处理直接插入数据库可能会乱码(没测试过,不知道数据库会不会自动转码),我们需要手动将gb2312转换成utf-8。
首先我们知道,python里的字符默认是ascii码,英文当然没问题啦,碰到中文的时候立马给跪。
不知道你还记不记得,python里打印中文汉字的时候需要在字符串前面加 u:
print u"来搞基吗?"
登录后复制
这样子中文才能显示,这里面的u的作用就是将后面的字符串转换为unicode码,这样中文才能得到正确的显示。
这里与之相关的有一个unicode()函数,用法如下
str="来搞基"str=unicode(str,"utf-8")print str
登录后复制
与u的区别是,这里用unicode将str转换为unicode编码,需要正确指定第二个参数,这里的utf-8是我test.py脚本自身的文件字符集,默认的可能是ansi。
unicode这是一个关键,下面继续
我们开始抓取百度首页,注意,游客访问百度首页,查看网页源代码,它的charset=gb2312。
立即学习“Python免费学习笔记(深入)”;
import urllib2def main(): f=urllib2.urlopen("http://www.baidu.com") str=f.read() str=unicode(str,"gb2312") fp=open("baidu.html","w") fp.write(str.encode("utf-8")) fp.close()if __name__ == '__main__' : main()
登录后复制
解释:
我们首先用urllib2.urlopen()方法将百度首页抓取到,f是句柄 ,用str=f.read()将所有源代码读入str中
搞清楚,str里面就是我们抓取的html源代码,由于网页默认的字符集是gb2312,所以如果我们直接保存到文件中,文件编码将是ansi。
对于大部分人来说,其实这就足够了,但是有时候我就想把gb2312转换成utf-8的该怎么办呢?
首先:
str=unicode(str,”gb2312″) #这里的gb2312就是str的实际字符集,我们现在将其转换成unicode
然后:
str=str.encode(“utf-8”) #将unicode的字符串重新编码成utf-8
最后:
将str写入到文件中,打开文件看一下编码属性,发现是utf-8的了,把utf-8
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2289680.html