Unescape Python Strings Von HTTP
Frage
Ich habe eine Zeichenfolge aus einem HTTP-Header bekommt, aber es entkam worden .. welche Funktion kann ich es verwenden, um unescape?
myemail%40gmail.com -> myemail@gmail.com
Würde urllib.unquote () sein, den Weg zu gehen?
Lösung
Ich bin ziemlich sicher, dass urllib unquote
ist der gemeinsame Weg von dies zu tun.
>>> import urllib
>>> urllib.unquote("myemail%40gmail.com")
'myemail@gmail.com'
Es gibt auch unquote_plus
:
Wie unquote (), aber ersetzt auch Pluszeichen durch Leerzeichen, wie für unquoting HTML-Formular Werte erforderlich.
Andere Tipps
Ja, scheint es, dass urllib.unquote()
diese Aufgabe erfüllt. (I getestet es gegen Ihr Beispiel auf Codepad .)
In Python 3 sind diese Funktionen urllib.parse.unquote
und urllib.parse.unquote_plus
.
Die letztere zum Beispiel für Abfrage-Strings in dem HTTP-URLs verwendet werden, wo die Raumzeichen () als Pluszeichen (
+
) traditionell codiert und die +
ist Prozent-codiert %2B
.
Neben diesen gibt es die unquote_to_bytes
daß wandelt das gegebene codierte Zeichenfolge bytes
, der verwendet werden kann, wenn die Kodierung nicht bekannt ist oder die codierten Daten binäre Daten sind. Allerdings gibt es keine unquote_plus_to_bytes
ist, wenn Sie es brauchen, können Sie tun:
def unquote_plus_to_bytes(s):
if isinstance(s, bytes):
s = s.replace(b'+', b' ')
else:
s = s.replace('+', ' ')
return unquote_to_bytes(s)
Weitere Informationen darüber, ob unquote
oder unquote_plus
zu verwenden, sind unter URL codieren, die verfügbar Leerzeichen.: + oder% 20