9

从文档中, urllib.unquote_plus 应该用空格替换加号。但是当我在 IDLE for python 2.7 中尝试以下代码时,它没有。

>>s = 'http://stackoverflow.com/questions/?q1=xx%2Bxx%2Bxx'
>>urllib.unquote_plus(s)
>>'http://stackoverflow.com/questions/?q1=xx+xx+xx'

我还尝试过类似的操作,比如urllib.unquote_plus(s).decode('utf-8'). 是否可以正确解码 url 组件?

4

2 回答 2

19

%2B文字 +的转义码;它被完全正确地转义。

不要将此与URL escaped +混淆,后者是空格的转义字符:

>>> s = 'http://stackoverflow.com/questions/?q1=xx+xx+xx'
>>> urllib.unquote_plus(s)
'http://stackoverflow.com/questions/?q1=xx xx xx'

unquote_plus()仅将编码空间解码为文字空间 ( '+'-> ' '),而不是编码+符号 ( '%2B'-> '+')。

如果您有用于解码的输入%2B而不是+您期望的空格,那么这些输入值可能被双重引用,您需要将它们取消引用两次。您也会看到%转义编码:

>>> urllib.quote_plus('Hello world!')
'Hello+world%21'
>>> urllib.quote_plus(urllib.quote_plus('Hello world!'))
'Hello%2Bworld%2521'

%25引用的%字符在哪里。

于 2013-09-06T16:21:40.470 回答
4

这些不是空格,而是实际的优点。空格是 %20,在 URL 的那部分中,它确实相当于 +,但 %2B 表示文字加号。

于 2013-09-06T16:22:47.820 回答