遇到这样一个问题,返回的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返回中文字典编码错误的解决方案相关推荐

  1. django JsonResponse返回中文时显示unicode编码(\u67e5\u8be2)

    django JsonResponse返回中文时显示unicode编码(\u67e5\u8be2) 关注公众号"轻松学编程"了解更多. 原因 这个unicode编码,是python ...

  2. python response.json()报错_Django JsonResponse json格式报错 解决Django响应JsonResponse返回json格式数据报错问题...

    想了解解决Django响应JsonResponse返回json格式数据报错问题的相关内容吗,彭世瑜在本文为您仔细讲解Django JsonResponse json格式报错的相关知识和一些Code实例 ...

  3. python response.json()报错_解决Django响应JsonResponse返回json格式数据报错问题

    解决Django响应JsonResponse返回json格式数据报错问题,给大家,报错,代码,图书,希望能 解决Django响应JsonResponse返回json格式数据报错问题 易采站长站,站长之 ...

  4. python读入中文文本编码错误

    python读入中文文本编码错误 python读入中文txt文本: #coding:utf-8def readFile():fp = open('emotion_dict//neg//neg_all_ ...

  5. ASP.NET MVC Url中带点号出现404错误的解决方案

    ASP.NET MVC Url中带点号出现404错误的解决方案 参考文章: (1)ASP.NET MVC Url中带点号出现404错误的解决方案 (2)https://www.cnblogs.com/ ...

  6. django中bulk_create返回id的三种实现

    Django中的QuerySet有bulk_create方法,但是此方法不会如预期的一样返回新增的所有对象的id,这个特性相当令人头疼,不过Postgre SQL在Django1.10后已经可以返回i ...

  7. split逗号分割中文出现乱码java_Java中URL传中文时乱码的问题解决方案

    前言 Java中URL传中文时乱码的问题相信不少朋友都遇到过,最近就遇到一个问题,就是在Action当中把一条中文信息绑定在URL的后面,ActionForward到别一个页面时,用reqeust.g ...

  8. 管家婆服装.NET II TOP 系列,安装过程中提示“silverlight/Sys未定义”错误,解决方案

    直接上文如下: 在查找这个错误的解决方案的时候,发现网络上很多人在问这个问题,于是乎,还发现有人收费解决.看图: 然后网络上有很多的解决方案,比如这个: 查了很多处理日志,说的都是在Web.Confi ...

  9. Python中的解决中文字符编码的问题

    python3中str默认为Unicode的编码格式 python2中str默认为bytes类型的编码格式 Unicode是一32位编码格式,不适合用来传输和存储,所以必须转换成utf-8,gbk等等 ...

最新文章

  1. 使用OleDb,将Excel导入DataSet
  2. 常见 Java 字节码 指令 助记符
  3. MySQL学习-排序与分组函数
  4. 一张图了解Spring Cloud微服务架构
  5. 保持 SSH 连接,防止长时间未动作断线
  6. PHP - 日期和时间
  7. 海康威视SDK基于JAVA二次开发
  8. HealthKit开发教程之HealthKit的主要类型数据
  9. Java过滤微信昵称特殊字符
  10. 零基础新人如何转行做新媒体运营?
  11. 打外星人的回合制JAVA游戏_25款最佳太空游戏盘点 带玩家到太空殖民打外星人...
  12. 2022年游戏出海行业研究报告
  13. 开源企业内部文档共享平台(mm-wiki)
  14. activiti:initiator详解
  15. HTML---下拉框、列表框使用详解(select 与 option)
  16. 数学基础(1)~ 概率论基础知识
  17. php里面substr函数,PHP substr()函数
  18. C++学习笔记——播放音乐
  19. 18.AtomicReference、AtomicStampReference底层原理。多个变量更新怎么保证原子性?CAS的ABA问题怎么解决?
  20. 海盗比酒量(四重循环遍历)(有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复...... 直到开了第4瓶)

热门文章

  1. ef sqlserver切换到mysql_可以为MySql和SqlServer使用EF上下文吗?
  2. linux查看杀死进程
  3. POJ-3590 The shuffle Problem 置换+DP | DFS
  4. JCP执行委员会新成员选举结果揭晓:Hologic未获通过
  5. 雅虎的Mash-up 之路
  6. 函数局部变量和函数的参数在栈中的布局
  7. 在一个公司10年,会怎么样?
  8. 教你精确计算 I2C 上拉电阻阻值
  9. Android系统root破解原理分析
  10. 一句话输出没有结束符的字符串