假设我使用 JavaScript 发送一个请求:
fetch("/query?q=" + encodeURIComponent("c'est un château? Yes & no!"));
到 Python Bottle 服务器:
from bottle import Bottle, request
app = Bottle("")
@app.route("/query")
def query():
q = request.query.get("q") # how to decode it?
print(q)
app.run()
如何解码request.query.get("q")
才能提取encodeURIComponent
编码?在此示例中,?
和&
被正确解码,但不是â
:print(q)
c'est un château? Yes & no!
Bottle 实现了自己的查询解析,
_parse_qsl
urlunquote
要么urllib.unquote
在 Python 2.x 中,要么在 Python 3.x 中urllib.parse.unquote
预设encoding
为:'latin1'
正是这种假设导致了您所看到的结果,而默认设置
'utf8'
是可行的:然后将不带引号的值输入到 中
FormsDict
,其中属性访问或调用getunicode
方法都会为您提供 UTF-8 版本,而get
方法和索引访问则会提供 Latin-1:或者,你可以使用
decode
所有内容都是 UTF-8 的版本:文档中涵盖了这一点:
和: