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?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top