2009-11-08 12 views

risposta

282

Dal docs:

urllib.quote(string[, safe]) 

sostituire i caratteri speciali nella stringa utilizzando la fuga% xx. Le lettere, le cifre, e i caratteri "_.-" non sono mai citati. Per impostazione predefinita, questa funzione è destinato ad citando il tratto percorso del URL.The opzionale parametri sicuro specifica caratteri aggiuntivi che non dovrebbe essere citato - suo valore di default è '/'

Quello significa passare '' per la cassaforte risolverà il primo numero:

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

circa il secondo problema, c'è un bug report su di esso here. A quanto pare è stato risolto in Python 3. È possibile risolvere facendo codifica utf8 come questo:

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

Tra l'altro uno sguardo al urlencode

Nota che urllib.quote si trasferisce a urllib.parse.quote in python3

+0

Grazie voi, sia funzionava benissimo. urlencode chiama solo più volte più volte in un ciclo, che non è la normalizzazione corretta per il mio compito (oauth). –

+4

la specifica: [rfc 2396] (https://www.ietf.org/rfc/rfc2396.txt) definisce questi come riservati 'reserved ="; " | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | "," 'Qual è il contenuto di urllib.quote. –

+25

'urllib.quote' spostato in' urlib.parse.quote', da Python3. – Hibou57

107

In Python 3, urllib.quote è stato spostato su urllib.parse.quote e gestisce unicode per impostazione predefinita.

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

La mia risposta è simile alla risposta di Paolo.

Penso che il modulo requests sia molto meglio. È basato su urllib3. Si può provare questo:

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

' requests.utils.quote' è un collegamento a python 'quote '. Vedi [fonti di richiesta] (https: // github.com/kennethreitz/richieste/blob/master/richieste/compat.py # L36). – Cjkjvfnby

+8

'requests.utils.quote' è un sottile wrapper di compatibilità per' urllib.quote' per python 2 e 'urllib.parse.quote' per python 3 –

8

Se stai usando Django, è possibile utilizzare urlquote:

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