[英]Python JSON decoder error with unicode characters in request content
使用请求库执行返回JSON响应的http GET当响应字符串包含unicode char时,我收到此错误:
json.decoder.JSONDecodeError: Invalid control character at: line 1 column 20 (char 19)
与Postman执行相同的http请求json输出是:
{ "value": "VILLE D\u0019ANAUNIA" }
我的python代码是:
data = requests.get(uri, headers=HEADERS).text
json_data = json.loads(data)
在使用json.loads(...)执行转换之前,我可以删除或替换所有Unicode字符吗?
这可能是由正确的单一报价标记U + 2019( '
)引起的。 由于我无法猜测的原因,高位字节已经被删除,留下一个控制字符,应该在正确的JSON字符串中进行转义。
因此,正确的方法是控制API返回的确切内容。 如果id确实返回'\'
控制字符,您应该联系API所有者,因为问题应该存在。
作为解决方法,您可以尝试通过过滤掉非ascii或控制字符来限制处理问题:
data = requests.get(uri, headers=HEADERS).text
data = ''.join((i for i in data if 0x20 <= ord(i) < 127)) # filter out unwanted chars
json_data = json.loads(data)
你应该得到{'value': 'VILLE DANAUNIA'}
或者,您可以用空格替换所有不需要的字符:
data = requests.get(uri, headers=HEADERS).text
data = ''.join((i if 0x20 <= ord(i) < 127 else ' ' for i in data))
json_data = json.loads(data)
你会得到{'value': 'VILLE D ANAUNIA'}
下面的代码适用于python 2.7:
import json
d = json.loads('{ "value": "VILLE D\u0019ANAUNIA" }')
print(d)
下面的代码适用于python 3.7:
import json
d = json.loads('{ "value": "VILLE D\u0019ANAUNIA" }', strict=False)
print(d)
输出:
{u'value': u'VILLE D\x19ANAUNIA'}
另一点是请求以json的形式返回数据:
r = requests.get('https://api.github.com/events')
r.json()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.