我有一个来自HTTP标头的字符串,但它已被转义..我可以用什么功能来取消它?
myemail%40gmail.com -> myemail@gmail.com
urllib.unquote()是否可行?
答案 0 :(得分:35)
我很确定urllib的unquote
是执行此操作的常用方法。
>>> import urllib
>>> urllib.unquote("myemail%40gmail.com")
'myemail@gmail.com'
还有unquote_plus
:
与unquote()类似,但也可以按空格替换加号,这是取消引用HTML表单值所必需的。
答案 1 :(得分:2)
是的,似乎urllib.unquote()
完成了这项任务。 (我tested it against your example on codepad。)
答案 2 :(得分:1)
在Python 3中,这些函数是urllib.parse.unquote
和urllib.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)
URL encoding the space character: + or %20提供了有关是否使用unquote
或unquote_plus
的更多信息。