Digamos que eu envie uma solicitação com JavaScript:
fetch("/query?q=" + encodeURIComponent("c'est un château? Yes & no!"));
para um servidor 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()
Como decodificar request.query.get("q")
para que ele extraia a encodeURIComponent
codificação? Neste exemplo, o ?
e &
são decodificados corretamente, mas o â
não é: print(q)
dác'est un château? Yes & no!
Bottle implementa sua própria análise de consulta,
_parse_qsl
urlunquote
estáurllib.unquote
no Python 2.x ouurllib.parse.unquote
comencoding
predefinição'latin1'
no Python 3.x:É essa suposição que leva ao resultado que você está vendo, enquanto o padrão
'utf8'
funcionaria:Os valores sem aspas são então alimentados em um
FormsDict
, onde o acesso ao atributo ou a chamada aogetunicode
método forneceria a versão UTF-8, enquanto oget
acesso ao método e ao índice fornecem Latin-1:Alternativamente, você pode usar
decode
uma versão onde tudo é UTF-8:Isso é abordado nos documentos :
e :