关于Django中JsonResponse返回中文字典编码错误的解决方案
解决方案:JsonResponse(data, json_dumps_params={'ensure_ascii':False})
! data是需要渲染的字典
def master(request):
data = {'这是':'主页'}
return JsonResponse(data, json_dumps_params={'ensure_ascii':False})
显示效果:
首先我们看JsonResponse()的源码:
class JsonResponse(HttpResponse): def __init__(self, data, encoder=DjangoJSONEncoder, safe=True,
json_dumps_params=None, **kwargs): if safe and not isinstance(data, dict):
raise TypeError(
'In order to allow non-dict objects to be serialized set the '
'safe parameter to False.'
)
if json_dumps_params is None:
json_dumps_params = {}
kwargs.setdefault('content_type', 'application/json')
data = json.dumps(data, cls=encoder, **json_dumps_params)
super(JsonResponse, self).__init__(content=data, **kwargs)
这里我们从根源开始找它编码错误的原因:
JsonResponse()在初始化的时候使用了json.dumps()把字典转换成了json格式,具体方法如下:
data = json.dumps(data, cls=encoder, **json_dumps_params)
接下来我们看看json.dumps()的源码:
def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
allow_nan=True, cls=None, indent=None, separators=None,
default=None, sort_keys=False, **kw):
if (not skipkeys and ensure_ascii and
check_circular and allow_nan and
cls is None and indent is None and separators is None and
default is None and not sort_keys and not kw):
return _default_encoder.encode(obj)
if cls is None:
cls = JSONEncoder
return cls(skipkeys=skipkeys, ensure_ascii=ensure_ascii,
check_circular=check_circular, allow_nan=allow_nan,
indent=indent,separators=separators, default=default,
sort_keys=sort_keys,**kw).encode(obj)
源码注释原文:If ``ensure_ascii`` is false, then the return value can contain non-ASCII characters if they appear in strings contained in ``obj``. Otherwise, all such characters are escaped in JSON strings.
也就是说ensure_ascii是false的时候,可以返回非ASCII码的值,否则就会被JSON转义。
所以含有中文的字典转json字符串时,使用 json.dumps() 方法要把ensure_ascii参数改成false,即 json.dumps(dict,ensure_ascii=False)。
JsonResponse()接收参数有关键词参数,json_dumps_params=None ,用来给 json.dumps() 传参,所以 要在关键字参数后面拼个字典来传另一组关键字参数 ensure_ascii=False,即:
json_dumps_params={'ensure_ascii':False}
综上可解决使用 JsonResponse() 强制把含有中文的字典转json并返回响应,前端渲染编码错误的问题。
关于Django中JsonResponse返回中文字典编码错误的解决方案的更多相关文章
- django JsonResponse返回中文时显示unicode编码(\u67e5\u8be2)
django JsonResponse返回中文时显示unicode编码(\u67e5\u8be2) 关注公众号"轻松学编程"了解更多. 原因 这个unicode编码,是python ...
- Django中不返回QuerySets的API -- Django从入门到精通系列教程
该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...
- django管理数据库之中文字符编码问题
django中通过models创建数据库字符编码文字mysql数据库中默认的字符编码都为latin1,插入中文时会出现以下的错误类型 1366 - Incorrect string value: '\ ...
- [UnicodeEncodeError]:Django中解决URL中文解释乱码问题
Django中在使用HttpResponseRedirect的时候,跳转URL中如果存在中文,会报错:会报UnicodeEncodeError错误. 解决办法: 使用urlquote对URL进行编码 ...
- Django中的 返回json对象的方式
在返回json对象的几种方式: 1 from django.shortcuts import render, HttpResponse # Create your views here. from d ...
- python3下urlopen解析中文url编码错误
这是在ipython下测试的结果: In [24]: x Out[24]: 'http://127.0.0.1:8000/xxx/?id=a45ex0bad3c9&game=五子棋' In [ ...
- JsonResponse返回中文乱码问题
class Publish(APIView): def get(self, request): publish_list = models.Publish.objects.all() bs = MyS ...
- Python中的解决中文字符编码的问题
python3中str默认为Unicode的编码格式 python2中str默认为bytes类型的编码格式 Unicode是一32位编码格式,不适合用来传输和存储,所以必须转换成utf-8,gbk等等 ...
- 处理springMvc中responsebody返回中文乱码
法一: @RequestMapping(value="/getUsersByPage",produces = public String getUsers 法二:在sprin ...
随机推荐
- Excellent JD
Job description About the role We are looking for a talented engineer who has excellent cloud skills ...
- 二维码Zxing&Zbar
二维码Zxing&Zbar 前言:该项目主要介绍了二维码扫描.闪光灯开启.本地二维码图片识别.二维码生成.分别是zxing和zbar(网格二维码)分别实现,具体效果运行项目apk... 开发环 ...
- Vue2.0中的系统指令
v-on注册事件 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...
- Java基础之final和static关键字
一.final 根据程序上下文环境,它可以修饰非抽象类.非抽象类成员方法和变量. final类不能被继承,没有子类,final类中的方法默认是final的. ...
- 安装Access Database Engine后,提示未注册Microsoft.ACE.OLEDB.12.0
未注册Microsoft.ACE.OLEDB.12.0 ,下载安装 Microsoft Access Database Engine:https://www.microsoft.com/en-us/d ...
- TcpListener、TcpClient
1.TcpClient using System; using System.Text; using System.Net.Sockets; namespace tcpclient { class t ...
- July 10th 2017 Week 28th Monday
I get that look a lot, but I never let it get to me. 我常常受到异样的目光,但我从不把它们放在眼里. I don't feel good these ...
- ZT 段祺瑞终生忏悔枪杀学生?
段祺瑞终生忏悔枪杀学生?http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece76310528c315c4380146080955468d4e4 ...
- 入门摄影——尼康DX
学习链接 单反应当怎样入门? - Williams的回答 - 知乎 [摄影教程]尼康数码单反相机使用视频教程_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili 图像品质与图像大小 图像品质:暂选JP ...
- 019sys模块
为了和python解释器交互,控制台执行脚本后面添加变量 import sysprint(sys.argv) def post(): print('upload')def download ...