You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:30:45