将响应体代入如下代码处理一下就可以了
# 判断编码,没有问题就跳过,有问题自动修正编码
try:
r.encoding = r.apparent_encoding if r.encoding == 'ISO-8859-1' else r.encoding
print(r.encoding)
except:
pass
content = r.text
代码在获取网页响应内容r后,对r的编码做判断和处理:
- 首先尝试获取r的encoding。r.encoding是响应的明确声称的编码,如在HTTP header的Content-Type中指定的编码。
- 如果r.encoding是’ISO-8859-1’,这通常表示编码未指定,则将其设置为r.apparent_encoding。r.apparent_encoding是根据内容分析出的编码。
- 如果r.encoding不是ISO-8859-1,则直接使用r.encoding作为编码。
- 在设置编码的过程中,使用try-except语句捕获 potentia的异常。如果设置失败,则pass继续执行。
- 最后将处理后的响应内容赋值到content变量。
这样做的好处是:
- 优先使用响应明确声称的编码,避免编码错误。
- 当编码未指定时,智能分析内容确定编码,避免使用默认的ISO-8859-1编码出错。
- 用try-except语句捕获设置编码的异常,保证不会中断程序执行。
总结
这段代码的目的是智能地处理响应的编码,最大可能避免编码错误,从而正确解析响应内容。