用于在请求中自动解压缩数据的编码是否可以更改?

时间:2016-12-06 18:20:01

标签: python encoding python-requests gzip

我在Python中使用了Requests模块,并发送了一个请求并得到了响应。

鉴于gzip具有以下信息,响应似乎为r.headers

{'Date': 'Tue, 06 Dec 2016 17:35:44 GMT', 'Content-Type': 'application/json', 'Content-Length': '21632', 'Cache-Control': 'public,max-age=3600', 'Content-Encoding': 'gzip', 'Vary': 'Accept-Encoding'}

但是,当Requests决定其编码并返回解压缩的数据时,当我尝试检出r.text时,它获得UnicodeEncodeError: 'ascii' codec can't encode character XXX

进一步挖掘,我发现响应中存在一个编码错误(r.content,它将数据返回为bites)。

Currencies":[{"Code":"JPY","Symbol":"\xc2\xa5","ThousandsSeparator":",...

但是,我不确定如何处理错误的编码错误。即使我将其编码设置为utf-8(r.encoding =" utf-8"),我仍然得到UnicodeEncodeError。我觉得gzip引起了Requests自动处理的问题,但我怎样才能纠正错误但自动完成的解码?

我向SkyScanner的API发送了一个请求,其中包含以下代码:

headers = {
    "Content-Type": "application/x-www-form-urlencoded",
    "Accept": "application/json",
    "charset": "utf-8"
}
r = requests.get(url, headers=headers)

我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

requests.Response对象具有raw属性,允许您获取原始套接字响应。

所以,你需要这样做:

r = requests.get(url, headers=headers, stream=True)
r.raw.read()

来源:http://www.python-requests.org/en/latest/user/quickstart/#raw-response-content