Unescape Python Strings From HTTP - PullRequest
       26

Unescape Python Strings From HTTP

16 голосов
/ 23 апреля 2009

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

myemail%40gmail.com -> myemail@gmail.com

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

Ответы [ 3 ]

35 голосов
/ 23 апреля 2009

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

>>> import urllib
>>> urllib.unquote("myemail%40gmail.com")
'myemail@gmail.com'

Там также unquote_plus:

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

2 голосов
/ 23 апреля 2009

Да, похоже, что urllib.unquote() выполняет эту задачу. (Я проверил это на вашем примере на кодовой панели .)

1 голос
/ 10 февраля 2015

В 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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...