Tengo una cadena de un encabezado HTTP, pero se ha escapado. ¿Qué función puedo usar para deshacerla?Unescape Python Strings From HTTP
myemail%40gmail.com -> [email protected]
¿Sería urllib.unquote() sea el camino a seguir?
Tengo una cadena de un encabezado HTTP, pero se ha escapado. ¿Qué función puedo usar para deshacerla?Unescape Python Strings From HTTP
myemail%40gmail.com -> [email protected]
¿Sería urllib.unquote() sea el camino a seguir?
Estoy bastante seguro de que el unquote
de urllib es la forma más común de hacerlo.
>>> import urllib
>>> urllib.unquote("myemail%40gmail.com")
'[email protected]'
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.
Sí, parece que urllib.unquote()
realiza esa tarea. (I tested it against your example on codepad.)
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 estos existe el unquote_to_bytes
que convierte la cadena codificada dada 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 URL encoding the space character: + or %20.
K, solo quería asegurarme ... Odio el uso de una función que parece hacer el trabajo, pero termina trabajando solo con unos pocos ejemplos que hice y rompiendo con vars del mundo real. heh. Entonces es imposible rastrear el problema ..: P – Ian