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

如何在Python Bottle服务端解码encodeURIComponent编码的请求参数?

解决Bottle服务端解析encodeURIComponent编码参数的乱码问题

问题原因

前端用encodeURIComponent编码时,会以UTF-8格式对特殊字符编码,但Bottle默认的查询参数解析逻辑(基于wsgiref)会用Latin-1(ISO-8859-1)解码,导致UTF-8编码的字符出现乱码(比如château变成château)。

两种修复方案

方案1:手动修复已乱码的字符串

如果已经通过request.query.get("q")拿到乱码字符串,可通过反向编码还原:

@app.route("/query")
def query():
    q = request.query.get("q")
    # 还原UTF-8编码的原始内容
    q_fixed = q.encode('latin-1').decode('utf-8')
    print(q_fixed)  # 输出:c'est un château? Yes & no!

方案2:直接用UTF-8解析查询字符串

绕过Bottle默认解析逻辑,手动用urllib.parse.parse_qs指定UTF-8编码解析原始查询字符串:

from bottle import Bottle, request
from urllib.parse import parse_qs

app = Bottle("")
@app.route("/query")
def query():
    # 获取原始查询字符串
    query_str = request.environ.get("QUERY_STRING", "")
    # 指定UTF-8编码解析参数
    params = parse_qs(query_str, encoding="utf-8")
    q = params.get("q", [""])[0]
    print(q)  # 输出:c'est un château? Yes & no!
app.run()

说明

encodeURIComponent严格遵循UTF-8编码规则,后端必须用UTF-8解码才能正确还原原始内容。方案2更直接,避免了先错误解码再修复的多余步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 05:35:00