Python3.8.3 Flask-RESTful接口返回非英文内容显示为UTF-8编码问题
问题根因
你遇到的非ASCII字符被转成\uXXXX编码串的问题,核心是Flask和Flask-RESTful的默认JSON序列化逻辑导致的:
- Flask默认开启
JSON_AS_ASCII配置,值为True时,所有不在ASCII范围内的字符(泰语、中文、日语等)都会在生成JSON响应时被自动转成Unicode转义序列 - 英文字符属于ASCII编码范围,所以不会触发转义逻辑,刚好对应你“英文正常、非英文显示异常”的现象
修复步骤
- 在Flask应用初始化完成后,直接修改全局配置关闭ASCII转义,修改后的核心代码如下:
app = Flask(__name__) # 关闭JSON序列化时的非ASCII转义逻辑 app.config['JSON_AS_ASCII'] = False api = Api(app)
- 如果你用的是较老版本的Flask-RESTful,全局配置可能不会被序列化逻辑正确继承,这时候需要给Api类自定义支持非ASCII输出的JSON响应方法,补充代码如下:
from flask import Response import json # 自定义不转义非ASCII字符的JSON响应生成逻辑 def output_utf8_json(data, code, headers=None): response = Response( json.dumps(data, ensure_ascii=False), status=code, mimetype='application/json; charset=utf-8' ) if headers: response.headers.extend(headers) return response # 将自定义逻辑绑定到Api类的JSON响应处理上 api.representations.update({ 'application/json': output_utf8_json })
- 改完后重启服务重新测试即可,传入泰语等非英文路径参数时,接口会直接返回原生字符内容,不会再出现编码转义串。
注意:如果使用的是Flask 2.3及以上版本,
JSON_AS_ASCII配置已经被迁移到app.json.ensure_ascii = False的写法,后续升级Flask版本遇到同类问题时,对应调整这个配置即可。
内容的提问来源于stack exchange,提问作者Thong D Prasan
相关产品推荐
相关产品推荐

