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 压缩文件但没解压。

解决方案:

  1. 检查文件是否被压缩:如果是 gzip 文件,先用 gzip 模块处理:
import gzip

with gzip.open('your_file.txt.gz', 'rt', encoding='utf-8') as f:
    content = f.read()
  1. 如果文件不是 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)
  1. 忽略错误字节(不推荐,会丢失数据):
with open('your_file.txt', 'r', encoding='utf-8', errors='ignore') as f:
    content = f.read()

建议:先用 file 命令或十六进制查看器确认文件真实格式。

这是 gzip 压缩过的数据,建议使用 requests。

谢谢,已经用 requests 解决了

回到顶部