18

我从 HTTP 标头中获得了一个字符串,但它已被转义.. 我可以使用什么函数来取消转义它?

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

urllib.unquote() 会是要走的路吗?

4

3 回答 3

37

我很确定 urllibunquote是这样做的常用方法。

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

还有unquote_plus

与 unquote() 类似,但也将加号替换为空格,这是取消引用 HTML 表单值的要求。

于 2009-04-23T04:41:14.930 回答
2

是的,它似乎urllib.unquote()完成了这项任务。(我在 codepad 上针对您的示例对其进行了测试。)

于 2009-04-23T04:42:59.763 回答
2

在 Python 3 中,这些函数是urllib.parse.unquoteurllib.parse.unquote_plus

后者例如用于 HTTP URL 中的查询字符串,其中空格字符 ( ) 传统上编码为加号 ( +),而+百分比编码为%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)

有关是否使用unquoteunquote_plusURL 编码空格字符时可用的更多信息: + 或 %20

于 2015-02-10T15:09:14.167 回答