Estoy tratando de codificar esta cadena antes de enviarla.
queryString = 'eventName=' + evt.fields["eventName"] + '&' + 'eventDescription=' + evt.fields["eventDescription"];
Debe pasar sus parámetros urlencode()
como una asignación (dict) o una secuencia de 2 tuplas, como:
>>> import urllib
>>> f = { 'eventName' : 'myEvent', 'eventDescription' : 'cool event'}
>>> urllib.urlencode(f)
'eventName=myEvent&eventDescription=cool+event'
Python 3 o superior
Utilizar:
>>> urllib.parse.urlencode(f)
eventName=myEvent&eventDescription=cool+event
Tenga en cuenta que esto no hace la codificación de URL en el sentido comúnmente utilizado (mire la salida). Para ese uso urllib.parse.quote_plus
.
Python 2
Lo que estás buscando es
urllib.quote_plus
:Python 3
En Python 3, el
urllib
paquete se ha dividido en componentes más pequeños. Usarásurllib.parse.quote_plus
(ten en cuenta elparse
módulo secundario)fuente
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 un trazador de líneas en la línea de comando¡Pruebe las solicitudes en lugar de urllib y no necesita molestarse con urlencode!
EDITAR:
Si necesita pares ordenados de nombre-valor o valores múltiples para un nombre, configure los parámetros de la siguiente manera:
en lugar de usar un diccionario.
fuente
Contexto
Problema
Solución
Trampas
Ejemplo
La siguiente es una solución completa, que incluye cómo lidiar con algunas dificultades.
fuente
Python 3:
urllib.parse.quote_plus (string, safe = '', codificación = Ninguno, errores = Ninguno)
fuente
urllib.parse.quote()
mí mismo ya que usa%20
más que+
.Prueba esto:
urlencode
no funcionará porque solo funciona en diccionarios.quote_plus
no produjo la salida correcta.fuente
my string
amy%20string
. ¡Su solución funciona de maravilla para eso!%20
lugar de+
. GraciasTenga en cuenta que el urllib.urlencode no siempre funciona. El problema es que algunos servicios se preocupan por el orden de los argumentos, que se pierden al crear el diccionario. Para tales casos, urllib.quote_plus es mejor, como sugirió Ricky.
fuente
>>> import urllib >>> urllib.urlencode([('name', 'brandon'), ('uid', 1000)]) 'name=brandon&uid=1000'
En Python 3, esto funcionó conmigo
fuente
para futuras referencias (ej .: para python3)
fuente
'c:/2 < 3'
en Windows es'///C://2%20%3C%203'
. Quiero algo que solo salga'c:/2%20%3C%203'
.Para su uso en scripts / programas que necesitan ser compatibles con python 2 y 3, el módulo seis proporciona funciones de comillas y códigos de urlen:
fuente
Si urllib.parse.urlencode () le está dando errores, intente con el módulo urllib3.
La sintaxis es la siguiente:
fuente
Otra cosa que podría no haberse mencionado ya es que
urllib.urlencode()
codificará valores vacíos en el diccionario como la cadena enNone
lugar de tener ese parámetro como ausente. No sé si esto normalmente se desea o no, pero no se ajusta a mi caso de uso, por lo tanto, tengo que usarloquote_plus
.fuente
Para Python 3, urllib3 funciona correctamente, puede usar lo siguiente según sus documentos oficiales :
fuente