9

ドキュメントから、urllib.unquote_plus はプラス記号をスペースで置き換える必要があります。しかし、Python 2.7のIDLEで以下のコードを試したところ、そうではありませんでした。

>>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スペースが必要な場所の代わりに使用するデコードする入力が+ある場合、それらの入力値はおそらく二重引用符で囲まれているため、引用符を 2 回外す必要があります。エンコードされたエスケープも表示%されます。

>>> 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 に答える