在Django中创建UTF-8 JsonResponse

时间:2016-01-14 20:05:12

标签: json django utf-8

是否有任何简单的方法可以覆盖DjangoJSONEncoder.ensure_ascii并将其设置为False或以任何其他方式输出django.http.JsonResponse中的非ascii文字?

5 个答案:

答案 0 :(得分:7)

编辑:

或者如果您倾向于使用utf-8格式,请使用而不是Django的JsonResponse():

return HttpResponse(json.dumps(response_data, ensure_ascii=False),
         content_type="application/json")

return JsonResponse(json.dumps(response_data, ensure_ascii=False), safe=False)

有关safe=False HERE

的更多信息

OLD:

你没有任何改变。

虽然Django以ASCII(UTF-8)创建JSON数据,但Javascript会自动将其解码回UTF-8。

答案 1 :(得分:1)

为了使 JsonResponse 保持向后兼容,我们在django-compat中添加/ backported /实现了它。也许这对现在或未来的人都有帮助......

答案 2 :(得分:0)

我没有找到比使用已安装的REST框架更好的方法:

from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import IsAuthenticatedOrReadOnly
from rest_framework.response import Response

from .models import INITIATOR_TYPES

@api_view(['GET'])
@permission_classes((IsAuthenticatedOrReadOnly, ))
def initiator_types(request):
    data = {t[0]: str(t[1]) for t in INITIATOR_TYPES}
    return Response(data)

但我真的不喜欢它。它比JsonResponsehttps://stackoverflow.com/a/24411716/854477

复杂得多

答案 3 :(得分:0)

from django.core.serializers.json import DjangoJSONEncoder
from django.http import JsonResponse


class MyJsonResponse(JsonResponse):
    def __init__(self, data, encoder=DjangoJSONEncoder, safe=True, **kwargs):
        json_dumps_params = dict(ensure_ascii=False)
        super().__init__(data, encoder, safe, json_dumps_params, **kwargs)

答案 4 :(得分:0)

从Django 1.9开始,您可以通过传递json_dumps_params argument的值来配置# from numpy import ndarray arra1loc = tuple(map(ndarray.tolist, arra1loc)) print('Row and Column of {} is {}'.format(arra1, arra1loc)) 以禁用JSONResponse开关:

ensure_ascii

通过return JsonResponse(response_data, safe=False, json_dumps_params={'ensure_ascii': False}) ensure_ascii=False输出用于非ASCII码点的UTF-8数据。