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

import sys

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

 

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

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

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

 

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

#coding:utf-8
   2: import urllib
   3: import sys
   4:  
   5: reload(sys)
   6:  
'utf-8')
   8:  
print sys.getdefaultencoding()
  10:  
)
'GBK')
  13: sock.close()
  14:  
print htmlSource

相关文章: