2017-11-17 23 views
1

私は少しPythonのnoobで、ここで何が起こっているのかを理解するのに問題があります。私はURLエンコードされた文字列をデコードしています。私はファイルdump®.txtを持っています(先頭のスペースが目的にあります)。私は期待していたurllib.unquote_plusは同じ文字列で別の出力を返します

>>> string1 = u'+dump%C2%AE.txt' 
>>> print urllib.unquote_plus(string1) 
dump®.txt 

>>> string2 = '+dump%C2%AE.txt' 
>>> print urllib.unquote_plus(string2) 
dump®.txt 

string1string2(または多分逆動作)についてのみ®の文字を見ることだった。私は私のオブジェクトの種類を変更すると、私は2つの異なった結果が得られます。誰も私が私の希望を得る前にstring1が文字列タイプである必要がある理由を理解するのを助けることができますdump®.txt

+0

*私はUTF-8にURLエンコードされた文字列をデコードしようとしています。 utf-8はエンコーディングです。 – wim

答えて

0

誰もが、それは私が私の希望dump®.txtを得る前にstring1は、文字列型である必要がある理由を私は理解するのに役立つことはできますか?

urllibは、unicodeをサポートしていません。なぜなら、urlsには定義上ASCII文字が含まれる可能性があるからです。ユニコードオブジェクトを渡してバグがあれば、正しいことをしようとするものがあります。crappy code in Python 2があります。

ユニコードオブジェクトをurllib.unquoteに渡すことは、ユーザーエラーです。そのようにしないでください。これは正しいです:

print urllib.unquote_plus(string1.encode()) 
+0

ありがとう!それはまさに私がurllibのドキュメントで望んでいたが、追跡できなかった放棄である。 – kristaps

関連する問題