You need to enable JavaScript to run this app. Python3.8.3 Flask-RESTful接口返回非英文内容显示为UTF-8编码问题
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 12:24:03