Python中的字符编码问题

  初学Python,本身就在一些语句处有些迷惑,如 a = u'你好',不知加上这个Unicode参数有何作用。一直到做爬虫抓取新闻时,在cmd的输出上总是出现错误。经过检索相关知识后,对一些编码问题做个小总结,其中参杂个人猜测,难免会有错误,以后再慢慢修改了。

  1.一定要声明#coding=XXX吗?

    首先.py文件中,编码默认是ASCII的,一旦py文件中出现了中文类似编码,IDE就会提示

    

    也就是提示文中出现了非ASCII,建议在文件开始制定编码,当然我们常用的是#coding:utf8 (貌似用那个带好多花花的,或者utf-8写法都无所谓)

  2.Unicode编码是做什么的?

    产生历史什么的就不提了,在python中有两种字符串类型,unicode和str ,简单来说Unicode是python内部表示字符串的方法,同时很多终端也是可以识别这个,而str的编码格式就是文件其实#coding:指定的。写个例子

这个直接在windows下执行的话显示:

  3.如何进行编码转换

    想要解决2中的问题,很明显,需要将s1按照utf-8解码成为原始模式(unicode)模式OK,如s3 = s1.decode('utf8') 然后print s3 即可。可以这么总结:在读取一个内容时,或者说从网上抓取内容时,Python会将其保存在str中,如果说想要转换成其他的类型,需要先进性相应的decode,然后再encode改变格式。举个例子:

#coding=utf8
s1 = '哈哈'
s2 = u'哈哈'
uni_s1 = s1.decode('utf8')
assert(uni_s1 == s2) #如果不相等抛出异常
str_s2 = s2.encode('utf8')
assert(str_s2 == s1)
raw_input("")

这个直接运行显示无错。也比较好理解了。

  最近在抓取一个网页上的内容时,在cmd中显示出来总是乱码,现在发现了问题,原来是utf8的格式,现在在内容显示时候加上.decode('utf8').encode('gbk')便能正常显示中文了。或者说,在read网页时候,直接解码为unicode也可!

 

    

posted @ 2014-08-12 16:50  hi_net  阅读(186)  评论(0编辑  收藏  举报