有的网页是gb2312编码,则需要将response.body判断编码,并解码
#检查编码
def check_encoding(self,response):
import chardet
#
#detect传入的是bytes
# 返回{'confidence': 0.99, 'encoding': 'GB2312'}
# 'encoding': 'utf-8'
encoding_info = chardet.detect(response.body)
encoding = encoding_info.get('encoding')
#非utf-8则解码
if encoding != 'utf-8':
# 如果是gb2312,则用gbk来解码,gbk可以解码繁体字以及日文假文等,解码更强
if encoding.lower()=='gb2312':
encoding = 'gbk'
new_body = response.body.decode(encoding)
#替换原来的body内容
response = response.replace(body=new_body)
return response
另外关于gb2312和gbk解码
问题:UnicodeDecodeError: 'gb2312' codec can't decode bytes in position 2-3: illegal multibyte sequence
原因:Python在做将普通字符串转换为unicode对象时,
例如:u_string = unicode(string , "gb2312"),如果你的字符串string中有诸如某些繁体字,例如"河滘小学"
中的滘,那么gb2312作为简体中文编码是不能进行解析的,必须使用国标扩展码gbk,gbk支持繁体中文和日文假文
解决方法:使用gbk,代替gb2312,例如:u_string = unicode(string , "gbk")