2009-11-08 44 views

Respuesta

282

Desde el docs:

urllib.quote(string[, safe]) 

reemplazar caracteres especiales en la cadena usando el escape xx%. Las letras, los dígitos, y los caracteres '_.-' nunca son cotizados. Por defecto, esta función está destinada a citando la sección de trayectoria del parámetro de seguridad opcional URL.The especifica caracteres adicionales que no debe ser citada - su valor por defecto es '/'

Eso significa pasar '' de seguro va a resolver su primer número:

>>> urllib.quote('/test') 
'/test' 
>>> urllib.quote('/test', safe='') 
'%2Ftest' 

sobre la segunda cuestión, hay un informe de fallo al respecto here. Al parecer, se fijó en Python 3. Puede solucionar por la codificación UTF-8 como la siguiente:

>>> query = urllib.quote(u"Müller".encode('utf8')) 
>>> print urllib.unquote(query).decode('utf8') 
Müller 

Por cierto echar un vistazo a urlencode

Tenga en cuenta que urllib.quote trasladó a urllib.parse.quote en python3

+0

Gracias usted, ambos trabajaron muy bien. urlencode solo llama a quoteplus muchas veces en un bucle, que no es la normalización correcta para mi tarea (oauth). –

+4

la especificación: [rfc 2396] (https://www.ietf.org/rfc/rfc2396.txt) las define como reservadas 'reserved ='; " | "/" | "¿?" | ":" | "@" | "&" | "=" | "+" | "$" | "," 'Que es lo que urllib.quote está tratando. –

+25

'urllib.quote' movido a' urlib.parse.quote', desde Python3. – Hibou57

107

En Python 3, urllib.quote se ha movido a urllib.parse.quote y maneja Unicode por defecto.

>>> from urllib.parse import quote 
>>> quote('/test') 
'/test' 
>>> quote('/test', safe='') 
'%2Ftest' 
>>> quote('/El Niño/') 
'/El%20Ni%C3%B1o/' 
29

Mi respuesta es similar a la respuesta de Paolo.

Creo que el módulo requests es mucho mejor. Se basa en urllib3. Puede probar esto:

>>> from requests.utils import quote 
>>> quote('/test') 
'/test' 
>>> quote('/test', safe='') 
'%2Ftest' 
+2

' requests.utils.quote' es un enlace a la cita de python ' '. Ver [fuentes de solicitud] (https: // github.com/kennethreitz/requests/blob/master/requests/compat.py # L36). – Cjkjvfnby

+8

'requests.utils.quote' es un contenedor de compatibilidad delgado para' urllib.quote' para python 2 y 'urllib.parse.quote' para python 3 –

8

Si está usando Django, puede utilizar urlquote:

>>> from django.utils.http import urlquote 
>>> urlquote(u"Müller") 
u'M%C3%BCller' 
Cuestiones relacionadas