1

私は問題があります。Pythonでurllibライブラリを使用しようとしています。しかし、私はそれを理解していません。

a = 'http%3A%2F%2Ffile%2Efir%2Enet%2F40d55cecf9a3a47851b1d0ebda3e423993c837d3ca%2F20110909%5F52%5Fblogfile%2Folsscj25%5F1315512137967%5F5tAuGI%5Fzip%2F%255B%25C0%25A9%25B5%25B5%25BF%25ECxp%255D%2B%25C0%25A9%25B5%25B5%25BF%25ECxp%2B%25BD%25C3%25B8%25AE%25BE%25F3%25B3%25D1%25B9%25F6%5F%2Ezip'

aa = unquote(unquote(a))
'http://file.fir.net/40d55cecf9a3a47851b1d0ebda3e423993c837d3ca/20110909_52_blogfile/olsscj25_1315512137967_5tAuGI_zip/[\xc0\xa9\xb5\xb5\xbf\xecxp]+\xc0\xa9\xb5\xb5\xbf\xecxp+\xbd\xc3\xb8\xae\xbe\xf3\xb3\xd1\xb9\xf6_.zip'

a1 = quote(quote(aa))
'http%253A//file.fir.net/40d55cecf9a3a47851b1d0ebda3e423993c837d3ca/20110909_52_blogfile/olsscj25_1315512137967_5tAuGI_zip/%255B%25C0%25A9%25B5%25B5%25BF%25ECxp%255D%252B%25C0%25A9%25B5%25B5%25BF%25ECxp%252B%25BD%25C3%25B8%25AE%25BE%25F3%25B3%25D1%25B9%25F6_.zip'

2 つの値 (a と a1) が等しくないのはなぜですか。私にお知らせください

ありがとう。

4

2 に答える 2

2

複数の問題を1つにまとめていると思います。

まず、この質問をしている唯一の理由は、2回引用されているように見えるファイル名の末尾部分の引用を解除したいからです。

次に、ファイル名は、二重に引用符で囲まれていなくても、utf-8でエンコードされていないデータになり、印刷できません。

第三に、あなたはURLフォーマットを理解していないようです。

最後に、引用符と引用符なしが実際に何をしているのか理解できません。

urllib.quote()およびurllib.unquote()は、URLのpath_info部分(http://file.fir.net/以降のすべて)のみを対象としています。

urllib.quote()は、文字列パラメータ内の「パーセントエンコードのURLで安全ではないものすべてを置き換えます。問題の原因となるすべての文字(例::〜[SPACE]など)を%BYTES_IN_HEX形式で置き換えます。

[:]はURLのパス部分では安全ではないため、quote()はそれをパーセントエンコードでエンコードします。

これらはすべて、実際にURLをURLのpath_info部分にエンコードする場合を除いて、URL全体をquote()に直接渡してはならないことを意味します。

問題を解決するための手順は次のようなものです。

  1. デバッグに役立つ印刷可能なものを使用するようにファイル名のエンコーディングを修正します。
  2. urllib.unquote()を1回実行して、通常のURLを取得します。
  3. 引用符で囲まれていないURLを取得したら、最初にそれをurlparse.urlparse()に渡して、コンポーネントを適切な部分に分割します。
  4. urllib.unquote()ファイル名の部分。
  5. これで、元のファイル名を取得できるようになり、必要な作業を続行できます。

参照:

http://docs.python.org/library/urlparse.html

http://docs.python.org/library/urllib.html

于 2012-04-09T09:40:29.853 に答える
0

答えはquote メソッドのドキュメントにあります:

... 文字、数字、および文字 '_.-' は決して引用符で囲まれません。...

aを使用して引用されていない可能性があり、必要以上の文字が引用されているため、a1異なります。引用符で囲まれた文字列は引き続き有効ですが、一部の文字は引用符で囲まれている必要がないため引用されていません。aquote()a1

于 2012-04-09T09:23:06.870 に答える