Python で URL パラメータをパーセントエンコードするにはどうすればいいですか? 質問する

Python で URL パラメータをパーセントエンコードするにはどうすればいいですか? 質問する

私が行った場合

url = "http://example.com?p=" + urllib.quote(query)
  1. /エンコードされない%2F(OAuth正規化が壊れる)
  2. Unicode は処理されません (例外がスローされます)

もっと良い図書館はありますか?

ベストアンサー1

からPython 3 ドキュメント:

urllib.parse.quote(string, safe='/', encoding=None, errors=None)

エスケープを使用して文字列内の特殊文字を置き換えます%xx。文字、数字、および 文字は'_.-~'引用符で囲まれません。デフォルトでは、この関数は URL のパス セクションを引用符で囲むことを目的としています。オプションの safe パラメータは、引用符で囲まない追加の ASCII 文字を指定します。デフォルト値は です'/'

つまり、安全''を渡すと最初の問題は解決されます。

>>> import urllib.parse
>>> urllib.parse.quote('/test')
'/test'
>>> urllib.parse.quote('/test', safe='')
'%2Ftest'

(この機能quoteurlliburllib.parsePython 3 では次のようにします。

ちなみに、urlコード


2つ目の問題については、それについてのバグレポートこれは Python 3 で修正されました。

Python 2では、次のようにエンコードすることで回避できます。UTF-8このような:

>>> query = urllib.quote(u"Müller".encode('utf8'))
>>> print urllib.unquote(query).decode('utf8')
Müller

おすすめ記事