Estou tentando codificar esta cadeia de caracteres antes de enviar.
queryString = 'eventName=' + evt.fields["eventName"] + '&' + 'eventDescription=' + evt.fields["eventDescription"];
Você precisa passar seus parâmetros para urlencode()
um mapeamento (dict) ou uma sequência de duas tuplas, como:
>>> import urllib
>>> f = { 'eventName' : 'myEvent', 'eventDescription' : 'cool event'}
>>> urllib.urlencode(f)
'eventName=myEvent&eventDescription=cool+event'
Python 3 ou superior
Usar:
>>> urllib.parse.urlencode(f)
eventName=myEvent&eventDescription=cool+event
Note que isso não faz url codificação no sentido comumente usado (veja a saída). Para esse uso urllib.parse.quote_plus
.
Python 2
O que você está procurando é
urllib.quote_plus
:Python 3
No Python 3, o
urllib
pacote foi dividido em componentes menores. Você usaráurllib.parse.quote_plus
(observe oparse
módulo filho)fonte
import urllib.parse ... urllib.parse.quote_plus(query)
python3 -c "import urllib.parse, sys; print(urllib.parse.quote_plus(sys.argv[1])) "string to encode"
para um um forro na linha de comandoTente solicitações em vez de urllib e você não precisa se preocupar com o urlencode!
EDITAR:
Se você precisar de pares nome-valor ou vários valores ordenados para um nome, defina os parâmetros como:
em vez de usar um dicionário.
fonte
Contexto
Problema
Solução
Armadilhas
Exemplo
A seguir, é apresentada uma solução completa, incluindo como lidar com algumas armadilhas.
fonte
Python 3:
urllib.parse.quote_plus (string, safe = '', codificação = None, erros = None)
fonte
urllib.parse.quote()
mim mesmo, pois usa%20
mais do que+
.Tente o seguinte:
urlencode
não funcionará porque funciona apenas em dicionários.quote_plus
não produziu a saída correta.fonte
my string
amy%20string
. Sua solução funciona como um encanto para isso!%20
vez de+
. ObrigadoObserve que o urllib.urlencode nem sempre faz o truque. O problema é que alguns serviços se preocupam com a ordem dos argumentos, que são perdidos quando você cria o dicionário. Nesses casos, o urllib.quote_plus é melhor, como sugeriu Ricky.
fonte
>>> import urllib >>> urllib.urlencode([('name', 'brandon'), ('uid', 1000)]) 'name=brandon&uid=1000'
No Python 3, isso funcionou comigo
fonte
para referências futuras (ex: para python3)
fonte
'c:/2 < 3'
no Windows é'///C://2%20%3C%203'
. Eu quero algo que acabaria de sair'c:/2%20%3C%203'
.Para uso em scripts / programas que precisam oferecer suporte ao python 2 e 3, o módulo seis fornece funções de cotação e urlencode:
fonte
Se o urllib.parse.urlencode () estiver apresentando erros, tente o módulo urllib3.
A sintaxe é a seguinte:
fonte
Outra coisa que pode não ter sido mencionada já é que
urllib.urlencode()
codificará valores vazios no dicionário como a string emNone
vez de ter esse parâmetro ausente. Não sei se isso é normalmente desejado ou não, mas não se encaixa no meu caso de uso, portanto, tenho que usá-loquote_plus
.fonte
Para o Python 3, o urllib3 funciona corretamente, você pode usar como segue os documentos oficiais :
fonte