2009-04-23 4 views

risposta

34

Sono quasi sicuro che l'urllib unquote è il modo comune per farlo.

>>> import urllib 
>>> urllib.unquote("myemail%40gmail.com") 
'[email protected]' 

C'è anche unquote_plus:

Come unquote(), ma sostituisce anche segni più da spazi, come richiesto toglie la quotatura dei valori di form HTML.

+1

K, volevo solo assicurarmi .. Odio usare una funzione che sembra fare il lavoro, ma finisce solo lavorando con alcuni esempi che ho fatto e rompendo con vars mondo reale. eh. Quindi diventa impossibile rintracciare il problema ..: P – Ian

1

In Python 3, queste funzioni sono urllib.parse.unquote e urllib.parse.unquote_plus.

Quest'ultimo viene utilizzato ad esempio per stringhe di query negli URL HTTP, in cui i caratteri spazio () sono tradizionalmente codificati come più caratteri (+), e la percentuale + è codificato a %2B.

Oltre a questi c'è lo unquote_to_bytes che converte la stringa codificata specificata in bytes, che può essere utilizzata quando la codifica non è nota oi dati codificati sono dati binari. Tuttavia non v'è alcuna unquote_plus_to_bytes, se ne avete bisogno, si può fare:

def unquote_plus_to_bytes(s): 
    if isinstance(s, bytes): 
     s = s.replace(b'+', b' ') 
    else: 
     s = s.replace('+', ' ') 
    return unquote_to_bytes(s) 

Maggiori informazioni su se utilizzare o unquoteunquote_plus è disponibile a URL encoding the space character: + or %20.