PCYO 评测夜鸥 六度计算世界

少年强 则 中国强

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码)解决

评论