<p>不,Flask通常处理百分比编码。URL中的参数是百分比编码的,当WSGI环境被设置时,这些参数会被解码。当匹配时,烧瓶会把这个传给你的路线。在</p>
<p>如果您不需要再次解码参数值,请删除您的<code>urllib.unquote()</code>调用。在</p>
<p>您的浏览器实际上会为您将URL中的空格编码为<code>%20</code>,即使位置栏将显示一个空格。位置栏对百分比编码的组件进行解码,以便能够读取国际字符(例如,<code>%E3%81%A9%E3%81%86%E3%82%82%E3%81%82%E3%82%8A%E3%81%8C%E3%81%A8%E3%81%86</code>显示为<code>どうもありがとう</code>)。在</p>
<P>如果您遇到了编码斜杠(^ {< CD5>},^ {CD6>})的问题,那么请参阅<a href="https://github.com/pallets/flask/issues/900" rel="nofollow noreferrer">issue #900</a>,考虑到具有Apache指令(以及其他WSGi服务器)的边缘情况。您需要使用<code><path:param></code>组件来匹配这些组件,因为默认的<code>string</code>参数类型与斜杠不匹配。在</p>
<p>如果我使用以下名为<code>routetest.py</code>的测试脚本:</p>
<pre><code>from flask import Flask
try:
from urllib.parse import unquote # PY3
except ImportError:
from urllib import unquote # PY2
app = Flask(__name__)
@app.route('/v1/<path:param>') # NOTE: <path:param> is required to match /
def f(param=''):
return (
f"param: {param}\ndecoded param: {urllib.parse.unquote(param)}\n",
200,
{'content-type': 'text/plain'}
)
</code></pre>
<p>使用<code>FLASK_APP=routetest flask run</code>在<code>localhost:5000</code>上启动此脚本,则无法重现您的问题:</p>
^{pr2}$
<p>这只能意味着您有一个WSGI服务器错误地处理了路径中的引用。在</p>