У меня есть строка из HTTP-заголовка, но она была экранирована. Какую функцию я могу использовать для ее отмены?
myemail%40gmail.com -> [email protected]
Будет ли urllib.unquote() быть в пути?
У меня есть строка из HTTP-заголовка, но она была экранирована. Какую функцию я могу использовать для ее отмены?
myemail%40gmail.com -> [email protected]
Будет ли urllib.unquote() быть в пути?
Я вполне уверен, что urllib unquote - это общий способ сделать это.
>>> import urllib
>>> urllib.unquote("myemail%40gmail.com")
'[email protected]'
Там также unquote_plus:
Подобно unquote(), но также заменяет знаки плюс пробелами, как это требуется для нечетких значений формы HTML.
Да, похоже, что urllib.unquote() выполняет эту задачу. (I проверил его против вашего примера на кодовом коде.
В 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.