本站使用了 Pjax 等基于 JavaScript 的开发技术,但您的浏览器已禁用 JavaScript,请开启 JavaScript 以保证网站正常显示!

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中,所以直接从引用处传入此参数即可

Offer

推广

 继续浏览关于 的文章

 本文最后更新于:2021/09/24 17:15:29,可能因经年累月而与现状有所差异

 引用转载请注明:诗恩有趣cnfunny - 有趣的 > Python,技巧 > Sanic框架返回json中文乱码(unicode码)解决