Python でパーセントエンコーディングを使用して URL パラメータをエンコードする
エラーを防止し、適切な正規化を確保するために URL パラメータをパーセントエンコーディングする場合、ビルドされたurllib.quote() 関数では不十分な場合があります。
デフォルトのエンコーディングの省略:
次のように urllib.quote() を使用します:
url = "http://example.com?p=" + urllib.quote(query)
/ から / へのエンコードを省略するため、OAuth 正規化で問題が発生します。
Unicode サポートの欠陥:
さらに、Unicode 文字列の処理に失敗し、次のようなエラーが発生します。非 ASCII 文字をエンコードしようとすると例外が発生します。
urllib.parse.quote() と安全なパラメータによるエンコーディングの改善:
これらの制限に対処するには、urllib を利用します。 Python 3 の parse.quote() は、解決策を提供します。
urllib.parse.quote(string, safe='/', encoding=None, errors=None)
安全なパラメーターのデフォルトは「/」ですが、空の文字列を指定すると、追加の ASCII 文字の除外が無効になり、/ の適切なエンコードが保証されます。
urllib.parse.quote('/test', safe='') # Encodes '/' to '%2F'
Python 2 での Unicode 処理の修正:
Python 2 では、urllib.quote() に Unicode 処理のバグがありました。これを回避するには、パーセント エンコーディングを適用する前に文字列を UTF-8 として手動でエンコードします。
query = urllib.quote(u"Müller".encode('utf8')) print urllib.unquote(query).decode('utf8') # Outputs: Müller
代替: urllib.urlencode()
より単純なアプローチとして、パーセント エンコーディングと Unicode の両方を自動的に処理する urllib.urlencode() の使用を検討してください。
encoded_params = urllib.urlencode({'p': query}) # Properly encodes '/' and supports Unicode
以上がPython で URL パラメータを適切にエンコードする方法: `urllib.quote()` および `urllib.urlencode()` の制限に対処するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。