我在 django-rest-framework 中的 APIView 端点的输入中处理 unicode 字符时遇到问题。
我正在使用 UnicodeJsonRenderer 渲染器类和 JSONParser 类进行输入。
我的输入如下,使用带有 HTML 表单的 web 可浏览 api:
{
"field": "hellö theré"
}
当我在视图中调用 request.DATA 时,我收到以下错误消息:
{
"detail": "JSON parse error - 'utf8' codec can't decode byte 0xe2 in position 96: invalid continuation byte"
}
我对此进行了相当广泛的调试,我可以看出它在第 60 行崩溃parsers.py
:
data = stream.read().decode(encoding)
我不确定如何解决这个问题。虽然我怀疑它与编码格式有关,但对我来说感觉不对,因为我的代码库中有其他代码(不使用 django-rest-framework 库)可以优雅地处理 unicode 输入/输出,就像我的settings.DEFAULT_CHARSET 是 utf-8。
对此的任何帮助将不胜感激。
更新:我怀疑它与发送非 UTF-8 编码字符数据的 Web 可浏览 API 有关,尽管元标记确实将字符集设置为 utf-8 ...
更新 2:我已粘贴在表单提交时发送的 POST 请求的请求标头下方,媒体类型为“application/json”。我认为内容类型没有指定字符集很奇怪。(我在发送 POST 请求时使用 Chrome 浏览器调试工具发现了这一切):
POST /api/stuff/ HTTP/1.1
Host: localhost:8000
Connection: keep-alive
Content-Length: 356
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Origin: http://localhost:8000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://localhost:8000/api/stuff/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Cookie: cookie-info