Flask-RESTful API返回非ASCII字符转义异常问题求助
解决Flask-RESTful返回JSON时非ASCII字符被转义的问题
我之前也碰到过一模一样的情况!问题出在Flask-RESTful依赖的JSON序列化规则上——它默认会把非ASCII字符转成Unicode转义码(比如你看到的h\u00f6ne),而直接用Response返回字符串的时候,并没有经过这套序列化处理,所以显示正常。下面给你几个可行的解决办法:
方法一:修改Flask应用的全局JSON配置
这是最简单的方案,只需要在初始化Flask app之后,添加一行配置,关闭ASCII自动转义:
app = Flask(__name__) # 添加这行配置,关闭非ASCII字符的自动转义 app.config['JSON_AS_ASCII'] = False API = Api(app)
Flask-RESTful会继承Flask应用的JSON配置,设置JSON_AS_ASCII = False后,返回的JSON里非ASCII字符就会以原始字符形式显示,比如höne而不是h\u00f6ne。
方法二:手动序列化并返回Response
如果你不想修改全局配置,可以在Resource的方法里手动用json.dumps序列化数据,指定ensure_ascii=False,然后封装成Response返回:
class APICLASS(Resource): def get(self, id): data = [ { "hey": 11, "test": "höne" }] # 手动序列化时关闭ASCII转义 json_str = json.dumps(data, ensure_ascii=False) return Response(json_str, mimetype='application/json'), 200
这种方式更灵活,适合只需要在特定接口关闭转义的场景。
方法三:自定义Flask-RESTful的JSON编码器
如果需要更复杂的序列化逻辑,可以自定义一个JSON编码器,然后绑定到API上:
from flask.json import JSONEncoder import json class CustomJSONEncoder(JSONEncoder): def encode(self, obj): # 自定义序列化逻辑,强制关闭ASCII转义 return json.dumps(obj, ensure_ascii=False) app = Flask(__name__) API = Api(app) # 给API设置自定义编码器 API.json_encoder = CustomJSONEncoder
不过这个方法相对前两种来说有点冗余,除非你需要额外的序列化逻辑,否则推荐前两种更简单的方案。
测试一下,不管用哪种方法,你的接口都会返回预期的结果:
[ { "hey": 11, "test": "höne" } ]
内容的提问来源于stack exchange,提问作者ElisaFo
相关产品推荐
相关产品推荐

