关于Django中JsonResponse返回中文字典编码错误的解决方案
遇到这样一个问题,返回的json不是中文
def get_json(request):return JsonResponse({"res": "成功"})
结果:
{"res": "\u6210\u529f"}
解决方案:JsonResponse(data, json_dumps_params={'ensure_ascii':False})
! data是需要渲染的字典
def get_json(request):return JsonResponse({"res": "成功"},json_dumps_params={'ensure_ascii': False})
{"res": "成功"}
原因分析:
首先我们看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 andcheck_circular and allow_nan andcls is None and indent is None and separators is None anddefault is None and not sort_keys and not kw):return _default_encoder.encode(obj)if cls is None:cls = JSONEncoderreturn 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 ...
- python response.json()报错_Django JsonResponse json格式报错 解决Django响应JsonResponse返回json格式数据报错问题...
想了解解决Django响应JsonResponse返回json格式数据报错问题的相关内容吗,彭世瑜在本文为您仔细讲解Django JsonResponse json格式报错的相关知识和一些Code实例 ...
- python response.json()报错_解决Django响应JsonResponse返回json格式数据报错问题
解决Django响应JsonResponse返回json格式数据报错问题,给大家,报错,代码,图书,希望能 解决Django响应JsonResponse返回json格式数据报错问题 易采站长站,站长之 ...
- python读入中文文本编码错误
python读入中文文本编码错误 python读入中文txt文本: #coding:utf-8def readFile():fp = open('emotion_dict//neg//neg_all_ ...
- ASP.NET MVC Url中带点号出现404错误的解决方案
ASP.NET MVC Url中带点号出现404错误的解决方案 参考文章: (1)ASP.NET MVC Url中带点号出现404错误的解决方案 (2)https://www.cnblogs.com/ ...
- django中bulk_create返回id的三种实现
Django中的QuerySet有bulk_create方法,但是此方法不会如预期的一样返回新增的所有对象的id,这个特性相当令人头疼,不过Postgre SQL在Django1.10后已经可以返回i ...
- split逗号分割中文出现乱码java_Java中URL传中文时乱码的问题解决方案
前言 Java中URL传中文时乱码的问题相信不少朋友都遇到过,最近就遇到一个问题,就是在Action当中把一条中文信息绑定在URL的后面,ActionForward到别一个页面时,用reqeust.g ...
- 管家婆服装.NET II TOP 系列,安装过程中提示“silverlight/Sys未定义”错误,解决方案
直接上文如下: 在查找这个错误的解决方案的时候,发现网络上很多人在问这个问题,于是乎,还发现有人收费解决.看图: 然后网络上有很多的解决方案,比如这个: 查了很多处理日志,说的都是在Web.Confi ...
- Python中的解决中文字符编码的问题
python3中str默认为Unicode的编码格式 python2中str默认为bytes类型的编码格式 Unicode是一32位编码格式,不适合用来传输和存储,所以必须转换成utf-8,gbk等等 ...
最新文章
- 使用OleDb,将Excel导入DataSet
- 常见 Java 字节码 指令 助记符
- MySQL学习-排序与分组函数
- 一张图了解Spring Cloud微服务架构
- 保持 SSH 连接,防止长时间未动作断线
- PHP - 日期和时间
- 海康威视SDK基于JAVA二次开发
- HealthKit开发教程之HealthKit的主要类型数据
- Java过滤微信昵称特殊字符
- 零基础新人如何转行做新媒体运营?
- 打外星人的回合制JAVA游戏_25款最佳太空游戏盘点 带玩家到太空殖民打外星人...
- 2022年游戏出海行业研究报告
- 开源企业内部文档共享平台(mm-wiki)
- activiti:initiator详解
- HTML---下拉框、列表框使用详解(select 与 option)
- 数学基础(1)~ 概率论基础知识
- php里面substr函数,PHP substr()函数
- C++学习笔记——播放音乐
- 18.AtomicReference、AtomicStampReference底层原理。多个变量更新怎么保证原子性?CAS的ABA问题怎么解决?
- 海盗比酒量(四重循环遍历)(有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复...... 直到开了第4瓶)