python处理url特殊符号-编码问题
说明
当url地址含有中文,或者参数有中文的时候,这个算是很正常了,但是把这样的url作为参数传递的时候(最常见的callback),需要把一些中文甚至'/'做一下编码转换。
RFC3986文档规定,Url中只允许包含以下四种:
1、英文字母(a-zA-Z) 2、数字(0-9) 3、-_.~ 4个特殊字符 4、所有保留字符,RFC3986中指定了以下字符为保留字符(英文字符): ! * ' ( ) ; : @ & = + $ , / ? # [ ]
所以对于一些中文或者字符,url不识别的,则需要进行转换
一、urlencode
urllib库里面有个urlencode函数,可以把key-value这样的键值对转换成我们想要的格式,返回的是a=1&b=2这样的字符串,比如:
|
1
2
3
4
5
6
7
|
import urllib.parsevalues={}values['username']='02蔡彩虹'values['password']='ddddd?'url="http://www.baidu.com"data=urllib.parse.urlencode(values)print(data) |
结果如下:
如果只想对一个字符串进行urlencode转换,怎么办?urllib提供另外一个函数:quote()
|
1
2
3
4
|
import urllib.parses='长春's=urllib.parse.quote(s)print(s) |
输出结果为:

二、urldecode
当urlencode之后的字符串传递过来之后,接受完毕就要解码了——urldecode。urllib提供了unquote()这个函数,可没有urldecode()!
|
1
2
3
|
s='%E5%B9%BF%E5%B7%9E's=urllib.parse.unquote(s)print(s) |
输出结果为:

自已动手试试python处理url编码:
import urllib.parse
url ='http://jira.XXX.com/secure/RapidBoard.jspa?rapidView=187&projectKey=OFFICIAL&selectedIssue=OFFICIAL-5837'
#编码
data = urllib.parse.quote(url)
print('编码后',data)
#解码
finall_url=urllib.parse.unquote(data)
print('解码后',finall_url)
输出结果:

浙公网安备 33010602011771号