1、报错原因
UnicodeDecodeError: 'gb2312' codec can't decode byte 0xa8 in position 351527: illegal multi
原因:将内容通过gb2312的方式去解码,想要获得Unicode字符串,如果内容中含有部分特殊字符会导致解码不成功从而报错。
UnicodeDecodeError
表示在解码过程中遇到了无法按照指定编码方式解析的字节序列。这里的错误信息 'gb2312' codec can't decode byte 0xa8 in position 351527
表示在尝试使用GB2312
编码方式来解码字节序列时,无法解码位置为351527的字节0xa8。
GB2312
是一个较早的汉字编码标准,主要用于中文环境。但是,0xA8
这个字节在GB2312
中并没有对应的有效字符,因此解码器无法将其解释为有效的字符。
2、解决方法
(1)确认文件的正确编码格式,如果文件不是GB2312
编码,应使用正确的编码格式来解码。
比如可以用 “utf-8”,“GBK” 等常用编码去测试。
# 指定 GBK 编码
soup = BeautifulSoup(response.content.decode('gbk'), 'lxml')
# 指定 utf-8 编码
soup = BeautifulSoup(response.content.decode('utf-8'), 'lxml')
(2)如果上面的编码都无法解决,可以在Python中打开文件时,指定errors='ignore'
或errors='replace'
来忽略或替换无法解码的字节。
# 增加参数errors='replace',忽略错误
with open('data.txt', 'r', encoding='gb2312', errors='replace') as file:
content = file.read()
希望这篇文章对你有帮助,不断进步!!