首页 > 代码库 > Python中的字符编码问题

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=utf8s1 = 哈哈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也可!