json()on" requests"响应引发UnicodeEncodeError

时间:2017-12-28 22:14:40

标签: python-3.x unicode python-requests

我使用requests库使用python3查询Github的Jobs API,但遇到了解析响应的错误。

图书馆:http://docs.python-requests.org/en/latest/

代码:

import requests
import json

url = 'https://jobs.github.com/positions.json?' 

response = requests.get(url)

print(response.json())

错误:

  

UnicodeEncodeError:' ascii'编解码器不能编码字符' \ u2019'在   位置321:序数不在范围内(128)

过去在Ruby中使用此API,我从未遇到过这个问题。

我也尝试将其转换为字典,但却导致了相同的错误。

还有其他关于UnicodeEncodeError的问题(主要是re:打开文件),但我不熟悉Python并且没有发现它们有用。

1 个答案:

答案 0 :(得分:1)

首先,检查响应是否真的是JSON。尝试打印response.text并查看它是否看起来像是有效的JSON对象。

假设它是JSON:它非常“hack”-ey,但你可以用它们的转义Unicode表示替换非ASCII字符:

def escape_unicode(c):
    return c.encode('ascii', 'backslashreplace').decode('ascii')

response = ...

text = response.text
escaped = re.sub(r'[^\x00-\x7F]', lambda m: escape_unicode(m.group(0)), text)
json_response = json.loads(escaped)