Webブラウザのアドレスバーに入力するURLには、原則として半角英数字と一部の記号(ASCII文字)しか使用できません。 そのため、日本語のキーワードやスペース、特殊記号などをURLに含める場合は、「パーセントエンコーディング(URLエンコード)」と呼ばれる形式(例: %E3%81%82)に変換する必要があります。
Pythonでは標準ライブラリ urllib.parse モジュールを使用して、簡単にこの変換と復元(デコード)を行えます。
実装例1:文字列のエンコードとデコード
ここでは、検索キーワードとして入力された日本語文字列をURLで使える形式に変換し、その後、元の日本語に戻す処理を実装します。
ソースコード
from urllib import parse
# 1. URLエンコード (quote)
# 検索したいキーワード(日本語)
search_keyword = "観光スポット Tokyo"
# parse.quote(文字列) でパーセントエンコーディング形式に変換
# 半角スペースも '%20' などに変換されます
encoded_text = parse.quote(search_keyword)
print(f"元の文字列 : {search_keyword}")
print(f"エンコード後: {encoded_text}")
print("-" * 30)
# 2. URLデコード (unquote)
# エンコードされた文字列を元の日本語に戻します
decoded_text = parse.unquote(encoded_text)
print(f"デコード後 : {decoded_text}")
実行結果
元の文字列 : 観光スポット Tokyo
エンコード後: %E8%A6%B3%E5%85%89%E3%82%B9%E3%83%9D%E3%83%83%E3%83%88%20Tokyo
------------------------------
デコード後 : 観光スポット Tokyo
実装例2:辞書からクエリパラメータを作成する (urlencode)
実務では、単一の文字列だけでなく、複数のパラメータ(?key=value&id=123 の形式)をまとめて作成したい場面が多々あります。 その場合は parse.urlencode() 関数を使用すると、辞書型から一発で変換でき便利です。
ソースコード
from urllib import parse
# 検索条件のパラメータ(辞書)
query_params = {
"q": "美味しい ラーメン", # 検索ワード(スペース入り)
"page": 1,
"sort": "date",
"region": "渋谷区"
}
# 辞書をURLクエリ文字列に変換
# 自動的に '&' で結合し、値はエンコードされます
query_string = parse.urlencode(query_params)
# ベースURLと結合
full_url = "https://example.com/search?" + query_string
print("--- クエリパラメータの生成 ---")
print(full_url)
実行結果
--- クエリパラメータの生成 ---
https://example.com/search?q=%E7%BE%8E%E5%91%B3%E3%81%97%E3%81%84+%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3&page=1&sort=date®ion=%E6%B8%8B%E8%B0%B7%E5%8C%BA
解説
parse.quote(string, safe=’/’)
文字列をURLエンコードします。 デフォルトではスラッシュ / は変換されません(パスの区切り文字として残すため)。もしスラッシュも %2F に変換したい場合は、引数に safe='' を指定します。
parse.urlencode(dict)
辞書(または2要素のタプルのリスト)を受け取り、key1=value1&key2=value2 という形式の文字列を生成します。Web APIへのリクエストを作成する際などに非常に重宝します。
技術書の購入コストを抑えてスキルアップするなら

ここまで読んでいただきありがとうございます。最後に宣伝をさせてください。
プログラミングの技術書や参考書は、1冊3,000円〜5,000円するものも多く、出費がかさみがちです。Kindle Unlimitedであれば、月額980円で500万冊以上の書籍が読み放題となります。
気になる言語の入門書から、アルゴリズム、基本設計の専門書まで、手元のスマホやPCですぐに参照可能です。現在は「30日間の無料体験」や、対象者限定の「3か月499円プラン」なども実施されています。まずはご自身のアカウントでどのようなオファーが表示されるか確認してみてください。
