关于ensure_ascii
默认的,使用json模块进行序列化数据时,有个默认参数是ensure_ascii=True
,它的作用是如果ensure_ascii=True
,那么对于要序列化的数据中,所有的的非 ASCII 字符进行转义。如果ensure_ascii=False
,这些字符会原样输出。
在json.dumps中
来自官网:https://docs.python.org/zh-cn/3/library/json.html?highlight=ensure_ascii
所以,我们直接序列化时:
python
import json
data = {"user": "张开", "age": 18}
print(json.dumps(data)) # {"user": "\u5f20\u5f00", "age": 18}
得到的中文就是经过转义之后的了。
那么,我们想看到打印结果仍然是中文时,你就需要指定ensure_ascii=False
了:
python
import json
data = {"user": "张开", "age": 18}
print(json.dumps(data)) # {"user": "\u5f20\u5f00", "age": 18}
print(json.dumps(data, ensure_ascii=False)) # {"user": "张开", "age": 18}
在Django中使用
如果你在Django项目中,使用了JsonResponse返回json数据,那么仍然存在这个问题:
python
from django.http import JsonResponse
def index(request):
data = {"user":"张开", "age": 18}
return JsonResponse(data)
浏览器访问效果,中文仍然是转义之后的样子。
想要看到中文的话,还是需要在ensure_ascii=False
上下功夫,但写法有所不同:
python
from django.http import JsonResponse
def index(request):
data = {"user":"张开", "age": 18}
return JsonResponse(data, json_dumps_params={"ensure_ascii": False})
现在,浏览器访问就能看到正常的中文了。
0406662.png)