json中文编码问题
在用flask写后端接口的时候,设置的接口返回格式是这样的:
from flask import jsonify def generate_response(data=none, message=none, code=200): res_data = { "data": data if data is not none else [], "success": "true", "message": message } return jsonify(res_data)
在浏览器看到的结果中,中文变成了编码格式
而在postman中可以看到正常的数据
这是由于flask默认会将非ascii字符转义为unicode编码。中文字符在默认情况下会被转义成\uxxxx
的形式
flask的响应机制
flask的响应机制主要是将视图函数的返回值转换为http响应。当视图函数返回一个字符串时,flask会将其封装成一个response对象,并设置默认的content-type
为 text/html; charset=utf-8
;当返回字典或列表时,flask会使用jsonify函数将其转换为json响应。
jsonfy
jsonify 是flask提供的一个便捷函数,用于将 python 对象(如字典、列表)转换为json响应。它会自动创建一个response对象,默认设置content-type
为application/json
json.dumps
在flask里,jsonify
函数其实是基于python的json.dumps
来实现的。json.dumps
默认会把非 ascii 字符转义成 unicode 编码形式。
可以通过设置ensure_ascii
参数为false
来避免这种转义,并将 json.dumps
的结果包装为 response
对象,设置响应头。
def generate_response(data=none, message=none, code=200): res_data = { "data": data if data is not none else [], "success": "true", "message": message } return response( json.dumps(res_data, ensure_ascii=false), content_type='application/json; charset=utf-8', status=code )
总结
到此这篇关于json中文编码问题的文章就介绍到这了,更多相关json中文编码问题内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论