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

Python Flask API Get端点非ASCII字符处理问题求助

解决Python 3.6 Flask API中瑞典语字符显示为问号的问题

我来帮你搞定这个编码坑!Python 3和Python 2的编码机制差异确实容易踩雷,结合你的情况,咱们一步步排查解决:

1. 先确认curl的请求是否正确传递编码后的参数

首先用curl -v命令查看实际发送的请求URL,确保瑞典语字符已经被正确编码为UTF-8的URL格式:

curl -v "http://localhost:5000/api/getdata/?name=ÅÄÖ"

正常情况下,请求行应该显示类似:

GET /api/getdata/?name=%C3%85%C3%84%C3%96 HTTP/1.1
如果看到乱码或者其他编码格式,说明你的终端编码不是UTF-8,先执行export LC_ALL=en_US.UTF-8把终端编码切换为UTF-8。

2. 在Flask视图函数中修复参数编码

Python 3下Flask默认会用latin-1解码URL参数,这会导致UTF-8编码的特殊字符变成问号。你可以在获取参数时手动重新解码:

# -*- coding: utf-8 -*-
from flask import Flask, request

app = Flask(__name__)
# 如果需要返回包含特殊字符的JSON响应,开启这个配置
app.config['JSON_AS_ASCII'] = False

@app.route('/api/getdata/')
def get_data():
    name = request.args.get('name')
    if name:
        # 重新编码修复:先转成latin-1字节,再用UTF-8解码
        name = name.encode('latin1').decode('utf-8')
    print("收到的name参数:", name)
    return {'name': name}

if __name__ == '__main__':
    app.run(debug=True)

3. 确保Python输出环境支持UTF-8

有时候后端打印显示问号不是参数解码的问题,而是Python的标准输出编码不支持UTF-8。启动Flask应用前设置环境变量:

export PYTHONIOENCODING=utf-8
python your_app.py

这样print()输出特殊字符时就不会变成问号了。

为什么Python 2.7能正常工作?

Python 2默认的字符串处理是字节流,你之前添加的配置(比如# -*- coding: utf-8 -*-加上sys.setdefaultencoding('utf-8'))强制了全局编码为UTF-8,刚好适配了curl传递的参数编码。但Python 3已经改用Unicode字符串,反而需要针对URL参数的解码逻辑做调整。

内容的提问来源于stack exchange,提问作者danielo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:55:12