Skip to content

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))