背景:
在python爬虫中,对于获取到的内容,或许需要进行解码操作。如:
result = res.decode('utf-8')
这时,可能会出现报错:UnicodeDecodeError: 'utf-8' codec can't decode byte
该情况可能是是由于出现了无法进行转换的 二进制数据 造成的。
解决办法
写一个小脚本进行一下判断,是整体的字符集参数选择上出现了问题,还是出现了部分的无法转换的二进制块。
#以读入文件为例:
f = open("data.txt","rb")#二进制格式读文件
while True:
line = f.readline()
if not line:
break
else:
try:
#print(line.decode('utf8'))
line.decode('utf8')
#为了暴露出错误,最好此处不print
except:
print(str(line))
1、如果输出的代码都是hex形式的,可能就是你选择的解码字符集出现了错误。
2、如果是字符集出现错误,建议多选择几种字符集测试一下: 选择的经验是: 如果是爬取到的网页文件,可以查看网页文件的meta标签下的charset属性值。如:
<meta charset="UTF-8">
3、如果以上办法依旧无用,可尝试修改字符集参数,一般这种情况出现得较多是在国标码(GBK)和utf8之间选择出现了问题。 出现异常报错是由于设置了decode()方法的第二个参数errors为严格(strict)形式造成的,因为默认就是这个参数,将其更改为ignore等即可。例如:
line.decode("utf8","ignore")