PCYOPCYO

山上有座庙

Sanic框架返回json中文乱码(unicode码)解决

问题

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中文"})

分析

  1. 查看Sanic文档,发现其json格式化库用的是ujson.
  2. 查看ujson文档,ujson默认unicode为True的,控制参数是ensure_ascii=True
  3. 查看Sanic代码,json参数是一直传递到ujson中,所以直接从引用处传入此参数即可
本原创文章未经允许不得转载 | 当前页面:PCYO » Sanic框架返回json中文乱码(unicode码)解决

评论