zoukankan      html  css  js  c++  java
  • Python3 使用requests请求,解码时出错:'utf8' codec can't decode byte 0x83 in position 1: invalid start byte

    requests请求的响应内容能够通过几个属性获得:

    response.text  

    为解码之后的内容,解码会根据响应的HTTP Header中的Content-Type选择字符集。例如

    1
    "'Content-Type': 'text/html;charset=UTF-8'"

    就会使用“UTF-8”解码。可通过访问response.encoding获得当前使用的字符集。

    也可修改使用的字符集

    1
    response.encoding = 'UTF-8'

    这样再次调用response.text的时候,会返回UTF-8解码的内容。

     

    response.content

    为二进制内容,并且已经自动对传输中使用的gzip和deflate编码进行了解码。

     

    response.raw

    为原始的响应内容,可以用来做一些分析。只是需要在初始化的时候加上参数stream=True,不然获取到的值为b''。但需要注意的是,添加参数(stream=True)之后,text和content都不能使用了。。。都会报错:

    1
    requests.exceptions.ChunkedEncodingError: ('Connection broken: IncompleteRead(102 bytes read)', IncompleteRead(102 bytes read))

     

    response.json()

    这一般用于已知返回数据格式为JSON字符串的情况。如果返回的是不可用的JSON数据会抛出异常:

    1
    ValueError: No JSON object could be decoded

     

    回到遇到的问题上来:

    1
    'utf8' codec can't decode byte 0x83 in position 1: invalid start byte

    该问题发生在调用response.content.decode()时。

     

    解决办法:

      1. 去掉请求HTTP Header中的gzip:

    1
    "accept-encoding": "gzip, deflate, br",

      2. 对原始内容进行gzip解压处理

  • 相关阅读:
    C语言集锦(一) C代码生成图片:BMP、PNG和JPEG
    Win32 OpenGL标准例子
    Tcc学习笔记(一) 开篇
    C语言集锦(二) 图像显示 Windows和Linux
    矢量图和Word:EPS,PDF,EMF和SVG
    firefox浏览器无法显示bootstrap图标问题总结
    现代字体栈
    jquery 插件大全
    meta 详解,html5 meta 标签日常设置
    工厂方法模式Factory Method(Java实现)
  • 原文地址:https://www.cnblogs.com/cutesnow/p/10963056.html
Copyright © 2011-2022 走看看