ここでの正解は、URL のクエリ文字列部分を で作成することurllib.urlencode
です。例えば:
qparams = {
'servername': 'vGames',
'serverpassword': '9929',
'channelname': 'CS.vGames.co.il GatherBot -2-/.Team-',
'channelpassword': '57' }
path = 'ventrilo://91.227.221.73:3824/' + urllib.urlencode(qparams)
他の場所からハードコーディングされたクエリ文字列を取得した場合は、次のように使用できますurllib.quote
。
qstring = 'servername=vGames&serverpassword=9929&channelname=CS.vGames.co.il GatherBot -2-/.Team-A&channelpassword=57'
path = 'ventrilo://91.227.221.73:3824/' + urllib.quote(qstring)
または、別の場所から完全にハードコードされた URL を取得した場合、その URL は既に適切にエンコードされているはずです (" " は "%20" など)。手動で URL を記述した場合は、スペースを %20 に置き換えて、それが機能するまで何か他のものをエンコードするだけで、いつでも手動でエンコードできます。通訳の周り。
次のようなことを試すことができます:それを使用urlparse.urlparse
してから、encode
またはquote
クエリ文字列部分を使用して、元に戻します。しかし、それが正しいことをするという保証はありません。あなたはそれにゴミを与えています、そしてそれはそれについて何がゴミであるかを必ずしも知っているわけではありません. たとえば、チャンネル名にはエンコードされていない「/」が含まれているため、それがどうurlparse
なるかは誰にもわかりません。言うまでもなく、「?」すらありません。クエリ文字列を導入します。
そのため、この問題を回避するにはカスタム コードが必要になる場合があります。
しかし、最善の解決策は一歩後退することです。URL がどこから来たとしても、どこかの時点で誰かが、何がパスで、何がクエリ文字列で、クエリ パラメータを結合する方法などを知っているはずです。その時点での知識をキャプチャし、それを伝え、正しい方法で物事を行いurllib.urlencode
ます。