Python中如何解决UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1错误
这个问题有人遇到过麽?
# xx.py
print( urllib.request.urlopen('网页地址,内容是 json 字符串').read() )
$ python37 xx.py
b’\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\xed[[…
Python中如何解决UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1错误
4 回复
这个错误通常是因为你试图用 utf-8 编码去解码一个非 UTF-8 编码的文件。0x8b 这个字节是 gzip 压缩文件的特征,所以最常见的情况是你读取了一个 gzip 压缩文件但没解压。
解决方案:
- 检查文件是否被压缩:如果是 gzip 文件,先用
gzip模块处理:
import gzip
with gzip.open('your_file.txt.gz', 'rt', encoding='utf-8') as f:
content = f.read()
- 如果文件不是 gzip,尝试其他编码:
# 尝试 latin-1 或 iso-8859-1(能解码任何字节)
with open('your_file.txt', 'r', encoding='latin-1') as f:
content = f.read()
# 或者尝试检测编码
import chardet
with open('your_file.txt', 'rb') as f:
raw_data = f.read()
result = chardet.detect(raw_data)
encoding = result['encoding']
content = raw_data.decode(encoding)
- 忽略错误字节(不推荐,会丢失数据):
with open('your_file.txt', 'r', encoding='utf-8', errors='ignore') as f:
content = f.read()
建议:先用 file 命令或十六进制查看器确认文件真实格式。
这是 gzip 压缩过的数据,建议使用 requests。
谢谢,已经用 requests 解决了

