是否有任何简单的方法可以覆盖DjangoJSONEncoder.ensure_ascii
并将其设置为False
或以任何其他方式输出django.http.JsonResponse
中的非ascii文字?
答案 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)
但我真的不喜欢它。它比JsonResponse
:https://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数据。