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.
Ответ 2
Да, похоже, что urllib.unquote()
выполняет эту задачу. (I проверил его против вашего примера на кодовом коде.
Ответ 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.