在 Python 中,URL 编码和解码可以通过 urllib.parse
模块中的 quote
和 unquote
函数来实现。以下是详细的用法和示例:
1. URL 编码
使用 quote
函数对字符串进行 URL 编码。
from urllib.parse import quote
# 原始字符串
original_string = "https://www.example.com/path?query=value¶m=123"
# URL 编码
encoded_string = quote(original_string)
print("Encoded URL:", encoded_string)
输出:
Encoded URL: https%3A//www.example.com/path%3Fquery%3Dvalue%26param%3D123
2. URL 解码
使用 unquote
函数对 URL 编码的字符串进行解码。
from urllib.parse import unquote
# 编码后的字符串
encoded_string = "https%3A//www.example.com/path%3Fquery%3Dvalue%26param%3D123"
# URL 解码
decoded_string = unquote(encoded_string)
print("Decoded URL:", decoded_string)
输出:
Decoded URL: https://www.example.com/path?query=value¶m=123
3. 对查询参数进行编码和解码
如果你只需要对查询参数部分进行编码或解码,可以使用 urlencode
和 parse_qs
函数。
编码查询参数
from urllib.parse import urlencode
# 查询参数字典
params = {
"query": "value",
"param": 123
}
# 编码查询参数
encoded_query = urlencode(params)
print("Encoded Query:", encoded_query)
输出:
Encoded Query: query=value¶m=123
解码查询参数
from urllib.parse import parse_qs
# 编码后的查询字符串
encoded_query = "query=value¶m=123"
# 解码查询字符串
decoded_query = parse_qs(encoded_query)
print("Decoded Query:", decoded_query)
输出:
Decoded Query: {'query': ['value'], 'param': ['123']}
4. 对路径部分进行编码
如果你只想对 URL 的路径部分进行编码(例如文件名),可以使用 quote
的 safe
参数来保留 /
等字符。
from urllib.parse import quote
# 路径部分
path = "/path/to/file name with spaces.txt"
# 编码路径(保留斜杠)
encoded_path = quote(path, safe="/")
print("Encoded Path:", encoded_path)
输出:
Encoded Path: /path/to/file%20name%20with%20spaces.txt
总结
- 编码:使用
quote
或urlencode
。 - 解码:使用
unquote
或parse_qs
。 - 根据需求选择是否保留特定字符(如
/
)不被编码。