Unescape Python de cadenas desde HTTP
Pregunta
Tengo una cadena desde una cabecera HTTP, pero ha sido escapé .. qué función puedo utilizar para unescape él?
myemail%40gmail.com -> myemail@gmail.com
¿Sería urllib.unquote () será el camino a seguir?
Solución
Estoy bastante seguro de que urllib de unquote
es la forma común de haciendo esto.
>>> import urllib
>>> urllib.unquote("myemail%40gmail.com")
'myemail@gmail.com'
También hay unquote_plus
:
Como fin de la cita (), pero también reemplaza por signos más espacios, como se requiere para unquoting valores del formulario HTML.
Otros consejos
Sí, parece que urllib.unquote()
lleva a cabo esa tarea. (I ensayaron contra su ejemplo en la pantalla de códigos .)
En Python 3, estas funciones son urllib.parse.unquote
y urllib.parse.unquote_plus
.
El último se utiliza por ejemplo para las cadenas de consulta en las direcciones URL HTTP, donde los caracteres de espacio () se codifican tradicionalmente como más el carácter (
+
), y la +
es ciento codificada a %2B
.
Además de éstos hay la unquote_to_bytes
que convierte la cadena codificada dado a bytes
, que se puede utilizar cuando la codificación no se conoce o los datos codificados son datos binarios. Sin embargo no hay unquote_plus_to_bytes
, si lo necesita, puede hacerlo:
def unquote_plus_to_bytes(s):
if isinstance(s, bytes):
s = s.replace(b'+', b' ')
else:
s = s.replace('+', ' ')
return unquote_to_bytes(s)
Más información sobre si usar o unquote
unquote_plus
está disponible en que codifica la carácter de espacio:. + o% 20