364

私が行った場合

url = "http://example.com?p=" + urllib.quote(query)
  1. /エンコードしません%2F(OAuth 正規化を破ります)
  2. Unicode を処理しません (例外をスローします)

より良いライブラリはありますか?

4

5 に答える 5

471

パイソン 2

ドキュメントから:

urllib.quote(string[, safe])

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

つまり''安全に渡すことで最初の問題が解決されます。

>>> 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を見てください。

パイソン3

Python 3 では、関数quoteは次の場所に移動されましたurllib.parse

>>> import urllib.parse
>>> print(urllib.parse.quote("Müller".encode('utf8')))
M%C3%BCller
>>> print(urllib.parse.unquote("M%C3%BCller"))
Müller
于 2009-11-08T02:52:22.797 に答える
200

Python 3 では、urllib.quoteが に移動され、デフォルトでUnicodeurllib.parse.quoteを処理します。

>>> from urllib.parse import quote
>>> quote('/test')
'/test'
>>> quote('/test', safe='')
'%2Ftest'
>>> quote('/El Niño/')
'/El%20Ni%C3%B1o/'
于 2012-11-29T11:52:51.430 に答える
63

requestsモジュールの方がはるかに優れていると思います。に基づいていurllib3ます。

これを試すことができます:

>>> from requests.utils import quote
>>> quote('/test')
'/test'
>>> quote('/test', safe='')
'%2Ftest'

私の答えは、パオロの答えに似ています。

于 2015-07-14T08:30:58.440 に答える