问题
Sanic框架是一个Python3.7+的异步高性能web框架。但是在使用其json返回时,发现中文返回不正确
代码如下:
from sanic import Sanic
from sanic.request import Request
from sanic.response import json as jsonResponse
app = Sanic(__name__)
@app.route("/")
def read_root(request:Request):
return jsonResponse({"ping": "pong中文"})
if __name__ == '__main__':
app.run(host="0.0.0.0", port=5050, debug=True)
实际打开浏览器显示不正确
{"ping":"pong\u4e2d\u6587"}
临时解决办法:
闲话少说,先上灵活的解决办法,添加一个ASCII参数值
return jsonResponse({"ping": "pong中文"},ensure_ascii=False)
永久解决办法
重新定义一个自己的json函数
def myJsonResponse(body,ensure_ascii=False):
return jsonResponse(body,ensure_ascii=ensure_ascii)
然后直接调用此函数,不用改变原先的逻辑
return myJsonResponse({"ping": "pong中文"})
分析
- 查看Sanic文档,发现其json格式化库用的是ujson.
- 查看ujson文档,ujson默认unicode为True的,控制参数是ensure_ascii=True
- 查看Sanic代码,json参数是一直传递到ujson中,所以直接从引用处传入此参数即可