7

https://dl.dropbox.com/u/94943007/file.kmlなどの URL を maps.google.com に入力すると、この URL は次のようにエンコードされます。

https:%2F%2Fdl.dropbox.com%2Fu%2F94943007%2Ffile.kml

このエンコーディングは何と呼ばれているのか疑問に思っています.Pythonを使用してこのようなURLをエンコードする方法はありますか?

私はこれを試しました:

このプロセスはURL エンコーディングと呼ばれます。

>>> urllib.quote('https://dl.dropbox.com/u/94943007/file.kml', '')
'https%3A%2F%2Fdl.dropbox.com%2Fu%2F94943007%2Ffile.kml'

しかし、期待した結果が得られませんでした:

'https%3A//dl.dropbox.com/u/94943007/file.kml'

私が必要なのはこれです:

https:%2F%2Fdl.dropbox.com%2Fu%2F94943007%2Ffile.kml

この URL を適切にエンコードするにはどうすればよいですか?

ドキュメントはこちら:

https://developers.google.com/maps/documentation/webservices/

状態:

URL エンコードされるすべての文字は、「%」文字と、UTF-8 文字に対応する 2 文字の 16 進数値を使用してエンコードされます。たとえば、UTF-8 の上海+中國は、%E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8B として URL エンコードされます。文字列 ? Mysterians は、%3F+and+the+Mysterians として URL エンコードされます。

4

1 に答える 1

7

使用する

urllib.quote_plus(url, safe=':')

コロンをエンコードしたくないので、呼び出すときに次のように指定する必要がありますurllib.quote()

>>> expected = 'https:%2F%2Fdl.dropbox.com%2Fu%2F94943007%2Ffile.kml'
>>> url = 'https://dl.dropbox.com/u/94943007/file.kml'
>>> urllib.quote(url, safe=':') == expected
True

urllib.quote()safeデフォルトのキーワード引数を取り、/どの文字が安全であると見なされ、したがってエンコードする必要がないかを示します。あなたが使用した最初の例''では、スラッシュがエンコードされました。スラッシュがエンコードされていない下に貼り付けた予期しない出力は、おそらく、キーワード引数をまったく設定しなかった以前の試行からのものでしたsafe

デフォルトの をオーバーライドし、'/'代わりに でコロンを除外すると':'、最終的に目的の結果が得られます。

編集: さらに、API はスペースをプラス記号としてエンコードするように呼び出します。したがってurllib.quote_plus()、 を使用する必要があります (そのキーワード引数のsafeデフォルトは ではありません'/')。

于 2012-08-24T18:41:21.490 に答える