Python Requests响应解码

3

我使用python requests发送请求,然后打印响应结果,但是让我困惑的是响应结果中的中文字符看起来像\u6570\u636e\u8fd4\u56de\u6210\u529f
以下是代码:

# -*- coding:utf-8 -*-
import requests

url = "http://www.biyou888.com/api/getdataapi.php?ac=3005&sess_token=&urlid=-1"
res = requests.get(url)
if res.status_code == 200:
    print res.text

以下是响应结果

响应数据

我该如何传输响应?我尝试使用编码和解码,但它没有起作用。


“transfer the response” 是什么意思?哪里出了问题? - filaton
我是指将“/ u”格式的字符转换为中文字符。 - hcancan
3个回答

5
使用 requests.Response.json 方法,您将获得中文字符。
import requests
import json

url = "http://www.biyou888.com/api/getdataapi.phpac=3005&sess_token=&urlid=-1"
res = requests.get(url)
if res.status_code == 200:
    res_payload_dict = res.json()
    print(res_payload_dict)

你所说的“不工作”是指出现了错误吗?你所使用的 JSON 格式是否正确?只需编辑第三行即可。 - Mederic Fourmy
你的代码中,在主机和参数之间没有“?”号,我已经修复了,但结果是这样的:{u'status': 1, u'info': u'\u6570\u636e\u8fd4\u56de\u6210\u529f', ...} - hcancan
我正在使用Python 3,这可能是我们差异的原因,我将尝试使用Python 2。 - Mederic Fourmy
谢谢,我已经找到了响应文本默认不是中文字符的原因,这是因为响应返回“/u”格式的字母,而不是使用utf-8编码的字符。 - hcancan
通过使用Python 2测试代码并打印res_payload_dict['info'],我得到了“数据返回成功”的结果。编码对我来说仍然是个谜,无论如何,很高兴你找到了解决方案。 - Mederic Fourmy

2

如何使用Python requests中的response.encoding?

举个例子,我们来ping Github的API。

# import requests module 
import requests 
  
# Making a get request 
response = requests.get('https://api.github.com') 
  
# print response 
print(response) 
  
# print encoding of response 
print(response.encoding)

输出:

<Response [200]>
utf-8

所以,在你的例子中,尝试使用res.json()而不是res.text

就像这样:

# encoding of your response 
print(res.encoding)

res.encoding='utf-8-sig'
print(res.json())

utf-8-sig中的sigsignature(即带有签名的utf-8文件)的缩写。

使用utf-8-sig读取文件时,会将BOM视为文件信息而不是字符串。


1
import requests
import json

url = "http://www.biyou888.com/api/getdataapi.php?ac=3005&sess_token=&urlid=-1"
res = requests.get(url)
res_dict = {}
if res.status_code == 200:
    print type(res.text)
    print res.text
    res_dict = json.loads(res.text)  # get a dict from parameter string

    print "Dict:"
    print type(res_dict)
    print res_dict
    print res_dict['info']

使用json模块解析输入。前缀u表示它是一个Unicode字符串。当您使用它们时,u前缀不会影响,就像我在最后几行展示的那样。

我尝试了你的方法,但只有最后一行打印了中文字符。 - hcancan
当你真正使用响应文本时,“u”前缀将不会产生影响。如果您只想将中文字符“打印”出来,就像我的 print 演示所示,使用类似 print res_dict['data'][0]['title'] 的东西即可。 - lincr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接