Python JSON 解码器错误,请求内容中存在 unicode 字符

标签 python json python-3.x

使用请求库执行返回 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/

相关文章:

python - 在 Ubuntu 18.04 上升级到 python 3.x

php - 你如何使用 Javascript 来复制表单域?

python - 如何检查矩形是否超出 pygame 屏幕

python - 更改一次性列表而不影响原始Python

python - 在 Python 中存储带前导零的整数

Python scapy 导入错误

javascript - Express 将外部 Json 渲染为 jade

php - 使用 JSON 向 php/MySQL 服务器发送 64 位数字?

python - 如何仅标准化数据帧的一列,同时保持其他列不受影响?

python - 从 dask 对象查看 dask 图