Skip to content

关于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

1832670296352489472.png

所以,我们直接序列化时:

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)

浏览器访问效果,中文仍然是转义之后的样子。

1832670296692228096.png

想要看到中文的话,还是需要在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})

现在,浏览器访问就能看到正常的中文了。

1832670296818057216.png0406662.png)