Python第三方库requests的编码问题

PS:这个解决方法可能很简单,但是这是平时的一些细节问题,所以有必要提醒一下!

首先代码不多,就是通过get方法去获取豆瓣首页信息,如图:但是会报UnicodeEncodeError: 'gbk' codec can't encode character '\u2122' in position 42358: illegal multibyte sequence错误

 其中,r.encoding是获取响应头Content-Type的charset值,有的网站没有charset字段,就可能使用默认的 ISO-8859-1, 一般那些不规范的页面往往有这样的问题.,所以这种方法可能获取编码不准确。

那么r.apparent_encoding就是获取网站真实的编码,apparent_encoding通过调用chardet.detect()来识别文本编码。

  • 情况一:这可能是大家正常情况下最常遇到的问题,那就是没有charset字段,或者编码与charset字段的不符合。

解决方法:

  1. 如果没有charset字段,可以通过r.apparent_encoding获取真实的编码,再使用r.encoding = ‘xxx’指定正确的编码,这样在调用text时就会根据指定的字符编码进行转换。
  2. 如果与charset的编码不符合,直接用r.encoding = ‘xxx’指定charset的编码就OK啦!

 

  • 情况二: 通过r.encoding或者r.apparent_encoding获取的编码都是一样的,但是还是会报编码错误,这种情况可能就要考虑下IDE的字符编码设置问题了。

以PyCharm为例按如下路径:file→settings→Editor→File Encodings→Project Encoding进行设置,如图:

 推荐看一下我以前的文章:Pycharm有必要改的几个默认设置项


欢迎与我一起学习!


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值