使用请求库执行返回 JSON 响应的 http GET,当响应字符串包含 unicode 字符时,我收到此错误:
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 确实返回 '\u0019'
控制字符,您应该联系 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 JSON 解码器错误,请求内容中存在 unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54784318/