2012-07-03 9 views
9

Sto affrontando un problema con urllib.url_encode in python. Le scommesse sono state spiegate con un codice:Come uscire da un simbolo pipe (|) per url_encode in python

>>> from urllib import urlencode 
>>> params = {'p' : '1 2 3 4 5&6', 'l' : 'ab|cd|ef'} 
>>> urlencode(params) 
'p=1+2+3+4+5%266&l=ab%7Ccd%7Cef' 

Voglio mantenere i tubi ('|') nel parametro l. puoi dirmi come?

Il risultato dovrebbe essere

'p=1+2+3+4+5%266&l=ab|cd|ef' 

PS: Non voglio mettere insieme l'URL manualmente, ma l'uso urlencode per questo.

Grazie -Pat

+0

Se avete bisogno i tubi in là, non sono urlencoding, semplice. – Wrikken

+9

urlencode e quindi sostituire '% 7C' con' | ' – TheZ

+0

Quindi fondamentalmente si desidera codificare l'URL e quindi ripristinare parte della codifica? Perché codifica URL allora? Mi sembra che gli URL con simboli pipe possano creare problemi. (http://stackoverflow.com/questions/11298404/the-connection-was-reset-asp-net) – chiccodoro

risposta

13

convertire un oggetto mappa o una sequenza di tuple di due elementi di una stringa “cento-encoded” [...]

Procedimento urlencode() è agire come previsto. Se si desidera impedire la codifica, è possibile prima codificare l'intero oggetto e quindi sostituire i caratteri codificati con le pipe.

>>> u = urlencode(params) 
>>> u.replace('%7C', '|') 
'p=1+2+3+4+5%266&l=ab|cd|ef' 
+0

Ho pensato di sostituire | con \ | o qualcosa prima che l'urlencoding funzioni, ma la soluzione è anche OK. Grazie – wzr1337

+0

Aggiungendo il carattere di escape standard, '\\ dovrebbe essere convertito in% 5C. L'unico modo per risolverlo sarebbe sostituirlo dopo che è stato codificato. – RobB

1

E 'più semplice in Python 3:

urllib.parse.urlencode(params, safe='|')