Unescape Python Strings из HTTP

У меня есть строка из HTTP-заголовка, но она была экранирована. Какую функцию я могу использовать для ее отмены?

myemail%40gmail.com -> [email protected]

Будет ли urllib.unquote() быть в пути?

Ответы

Ответ 1

Я вполне уверен, что urllib unquote - это общий способ сделать это.

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

Там также unquote_plus:

Подобно unquote(), но также заменяет знаки плюс пробелами, как это требуется для нечетких значений формы HTML.

Ответ 3

В Python 3 эти функции urllib.parse.unquote и urllib.parse.unquote_plus.

Последний используется, например, для строк запроса в URL-адресах HTTP, где символы пробела () традиционно кодируются как символ плюса (+), а + имеет процентное кодирование до %2B.

В дополнение к этому существует unquote_to_bytes, который преобразует заданную кодированную строку в bytes, которая может использоваться, когда кодирование неизвестно или кодированные данные являются двоичными данными. Однако нет unquote_plus_to_bytes, если вам это нужно, вы можете сделать:

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

Дополнительная информация о том, следует ли использовать unquote или unquote_plus, доступна в URL-кодировании символа пробела: + или %20.