1. ホーム
  2. python

[解決済み] PythonでURLパラメータをパーセントエンコードするにはどうしたらいいですか?

2022-03-15 04:23:02

質問

もし、私が

url = "http://example.com?p=" + urllib.quote(query)

  1. をエンコードしない /%2F (OAuthの正規化を破る)
  2. Unicodeを扱えない(例外が発生する)

もっといいライブラリはないですか?

どのように解決するのですか?

Python 2

から ドキュメント :

urllib.quote(string[, safe])

文字列中の特殊文字を置換する は%xxエスケープを使用します。文字、数字。 および文字 '_.-' は決して使用されません。 を引用しています。デフォルトでは、この機能は パスセクションを引用するためのものです。 オプションのsafeパラメータは、URLの は、以下の文字を追加で指定します。 は引用してはいけません。 デフォルトの の値は '/' です。

を渡すということです。 '' に対して 安全 を使えば、最初の問題は解決します。

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

2つ目の課題については この件に関するバグレポート . どうやらPython 3で修正されたようです。としてエンコードすることで回避することができます。 UTF-8 このように

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

ちなみに urlencode .

Python 3

>>> import urllib.parse
>>> print(urllib.parse.quote("Müller".encode('utf8')))
M%C3%BCller
>>> print(urllib.parse.unquote("M%C3%BCller"))
Müller