Python的编码问题

在看《Dive Into Python》有一章是对XML的处理,其中写着

import sys

sys.setdefaultencoding('iso-8859-1')

 

而我使用urlopen写一个采集小程序时,遇上了一个编码问题。以抓取百度首页为例:

sock = urllib.urlopen("http://www.baidu.com/")
htmlSource = sock.read()
sock.close()
 
当打印htmlSource时,会发现出现乱码的情况了,原因是百度默认的编码是gb2312,而python默认的编码格式为ascii(可通过打印sys.getdefaultencoding() 显示出来)
 
为什么import sys后,然后使用sys.不会自动提示显示出setdefaultencoding呢?之后搜索了一下:
python的初始化脚本site.py会把sys模块的setdefaultencoding方法删除,python在初始化完毕之后,禁止用户改变默认编码。

以上内容引用至【python改变默认编码

 

还有就是在抓取到页面后,需要对页面进行一个解码动作(decode),完整的demo代码将会如下所示:

   1: #coding:utf-8
   2: import urllib
   3: import sys
   4:  
   5: reload(sys)
   6:  
   7: sys.setdefaultencoding('utf-8')
   8:  
   9: print sys.getdefaultencoding()
  10:  
  11: sock = urllib.urlopen("http://www.baidu.com/")
  12: htmlSource = sock.read().decode('GBK')
  13: sock.close()
  14:  
  15: print htmlSource
posted @ 2011-10-28 00:15 meteoric_cry 阅读(...) 评论(...) 编辑 收藏