python测试开发django-16.JsonResponse返回中文编码问题
Posted mashuqi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python测试开发django-16.JsonResponse返回中文编码问题相关的知识,希望对你有一定的参考价值。
前言
django查询到的结果,用JsonResponse返回在页面上显示类似于\\u4e2d\\u6587 ,注意这个不叫乱码,这个是unicode编码,python3默认返回的编码
遇到问题
接着前面的User表,测试数据如下
user_name | psw | |
---|---|---|
yoyo | 123456 | [email protected] |
yoyo2 | 111111 | 1 |
yoyo5 | 111111 | 0 |
接着上一篇【python测试开发django-15.查询结果转json(serializers)】,如果数据库里面有中文的数据,
返回的json数据中文不能正常显示如下,查询的结果中有"user_name": "\\u4e0a\\u6d77-\\u60a0\\u60a0", "psw": "\\u5bc6\\u7801", "mail": "\\u4e2d\\u6587"
"data": [
"user_name": "yoyo",
"psw": "123456",
"mail": "[email protected]"
,
"user_name": "yoyo2",
"psw": "111111",
"mail": "1"
,
"user_name": "yoyo5",
"psw": "111111",
"mail": "0"
,
"user_name": "\\u4e0a\\u6d77-\\u60a0\\u60a0",
"psw": "\\u5bc6\\u7801",
"mail": "\\u4e2d\\u6587"
]
解决办法
JsonResponse里面有个参数json_dumps_params,设置为json_dumps_params=‘ensure_ascii‘:False即可
class JsonResponse(data, encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None, **kwargs)
data: 应该传递一个标准的 python 字典给它,它将其转换成 json 格式的数据。
encoder:默认为 django.core.serializers.json.DjangoJSONEncoder,用于序列化data。关于这个序列化的更多信息参见JSON 序列化。
safe : 默认为True。如果设置为False,可以传递任何对象进行序列化(否则,只允许dict 实例)。如果safe 为True,而第一个参数传递的不是dict 对象,将抛出一个TypeError。
另外:它的默认 Content-Type 头部设置为application/json。
json_dumps_params:在1.9版本中新增,可以传递一个python标准的 json 库中,json.dump() 方法处理后的对象给它,用于生成一个响应。
修改后代码(上一篇的三种方法都适用)
def json_data(request):
‘‘‘values()获取的可迭代dict对象转list‘‘‘
data =
ret = User.objects.all().values()
data["data"] = list(ret)
return JsonResponse(data,
safe=False,
json_dumps_params=‘ensure_ascii‘:False)
在urls.py配置访问地址 url(r‘^json_data$‘, testdb.json_data,访问后得到的结果(返回的数据自己在线解析过)
"data": [
"user_name": "yoyo",
"psw": "123456",
"mail": "[email protected]"
,
"user_name": "yoyo2",
"psw": "111111",
"mail": "1"
,
"user_name": "yoyo5",
"psw": "111111",
"mail": "0"
,
"user_name": "上海-悠悠",
"psw": "密码",
"mail": "中文"
]
以上是关于python测试开发django-16.JsonResponse返回中文编码问题的主要内容,如果未能解决你的问题,请参考以下文章