解决python2.7中UnicodeEncodeError

在开始之前让我先放上代码

from bs4 import BeautifulSoup
import urllib2
req = urllib2.urlopen("https://www.qidian.com/all?orderId=&style=1&pageSize=20&siteid=1&pubflag=0&hiddenField=0&page=1")
ht = req.read()
soup1 = BeautifulSoup(ht,'lxml')
f = open('t.txt','w')
for string2 in soup1.strings:
    f.write(string2)
f.closed

看起来挺正常的代码,在我执行后就出现了如下问题

Traceback (most recent call last):
  File "test.py", line 109, in <module>
    f.write(string2)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)

这里解决方案参考了http://wangye.org/blog/archives/629/
好吧,先放上解决方案

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

由于我之前是ascii编码方式,所以python2.7会自然而然的用ascii的解码方式,而在上述的代码中由于我抓取的是起点中文网(就是有很多中文),所以导致当前的字符流不在ascii范围中,然后就抛出了ordinal not in range(128)的错误。
于是我们要通过修改默认编码方式,对就是用setdefaultencoding(’utf-8’)

最后说一下好像python3.X没有这种问题出现。

个人见解,如有错误请帮忙指出,谢谢

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值