切换主题
URL编码/解码详解
URL 路径或者查询参数中,带有中文或者特殊字符的时候,就需要对 URL 进行编码(采用十六进制编码格式)。URL 编码的原则是使用安全字符去表示那些不安全的字符。
安全字符,指的是没有特殊用途或者特殊意义的字符。
URL基本组成
URL 是由一些简单的组件构成,比如协议、域名、端口号、路径和查询字符串等,示例如下:
url
http://www.baidu.com/s?wd=1
其中::
、?
等是保留字符,常用的保留字符有:/ . ... # @ $ + ; %
需要编码的字符
需要编码的字符,就是那些不安全的字符,比如保留字符和中文字符等。 下面简单总结一下,哪些字符需要编码,分为以下三种情况:
- ASCII 表中没有对应的可显示字符,例如,汉字。
- 不安全字符,包括:# ”% <> [] {} | \ ^ ` 。
- 部分保留字符,即 & / : ; = ? @ 。
Python实现编码与解码
Python 的标准库urllib.parse模块中提供了用来编码和解码的方法,分别是 urlencode() 与 unquote() 方法。
python
from urllib.parse import urlencode
from urllib.parse import unquote
# 编码
params = {
'name': '张三',
'age': 18,
'gender': '男'
}
url = 'http://www.baidu.com/s?' + urlencode(params)
print(url)
# 解码
url = 'http://www.baidu.com/s?name=%E5%BC%A0%E4%B8%89&age=18&gender=%E7%94%B7'
print(unquote(url))