python3url編解碼base64編解碼ASE加解密
字元編解碼
Python3相對於Python2的一大改變就是,對預設字元型別進行了修改。Python2中定義字串預設為二進位制字串,強制加字首u的才是unicode字串;而Python3中字串預設為unicode,強制加字首b的才是二進位制字串。(也就是剛好反過來了)
這裡的二進位制字串:指的是進行過編碼後的字串。即utf8、gbk、ascii等編碼後的串都是二進位制的。存放到檔案的時候也必須是二進位制的內容。
unicode字串:是一種在記憶體中存在的編碼規範,它可以和任意其它型別的編碼進行轉換。比如:utf-8、gbk、ascii等。並且其它編碼在進行互相轉換時,都必須通過unicode來中轉。該字串只在記憶體中存在,沒有具體的編碼實現。
已"中國"為例,來看下各種編碼方式下的表示形式:
"中國"
unicode:\u4e2d\u56fd
utf8:\xe4\xb8\xad\xe5\x9b\xbd
gbk:\xd6\xd0\xb9\xfa
可以看到同樣的字串,在不同的編碼中其對應的值是不一樣的。但是不管哪種編碼都可以轉成unicode,unicode也可以轉成任意其它的編碼。(unicode被稱為萬國碼,是世界上最大的字符集,可以支援編碼全球的語言,但目前在編的並不是全部)
1、編碼
python3中字元編碼很簡單。直接通過encode方法即可。(該方法只有unicode字元物件才有,Python3中unicode是str物件)
s = '中國' # => unicode
print(type(s)) # => str
s2 = s.encode('utf8') # => utf8
print(type(s2)) # => byte
s3 = s.encode('gbk') # => gbk
print(type(s3)) # => byte
2、解碼
Python3中解碼用的是decode方法。(該方法只有byte物件才有)
b = b'中國' # => 具體編碼程式設計環境的預設編碼而定,通常為utf8 print(type(b)) # => byte b1 = b.decode('utf8') # => unicode print(type(b1)) # => str
URL編解碼
1、解析URL字串
from urllib import parse
url = 'https://www.baidu.com/s?wd=python3%20url編碼'
parsed = parse.urlparse(url)
print(parsed)
urlparse會把完整的URL串解析成各個部分,方便我們直接提取特定內容。其執行結果如下:
ParseResult(scheme='https', netloc='www.baidu.com', path='/s', params='', query='wd=python3%20url編碼', fragment='')
即解析後分解為:協議,域名、路徑、引數、查詢字串等。我們可以直接使用對應的屬性名來獲取。比如:獲取query內容。
print(parsed.query) # => wd=python3%20url編碼
2、query引數編碼
由於query引數對應的是GET請求時,附件在URL路徑後的查詢引數。為了避免瀏覽器解析到特殊字元而導致不可預知的問題,所以通常需要對其內容進行編碼,稱為URLEncode。Python3中編碼的方式如下:
d = {
'name': '陳霸天',
'sex': 'male',
'age': 18
}
query = parse.urlencode(d)
print(query) # => name=%E9%99%88%E9%9C%B8%E5%A4%A9&sex=male&age=18
使用urlencode方法,可以很方便的對一個給定的字典物件的鍵值內容進行編碼,並串聯成一個有效格式的query字串。可以直接附件到URL路徑後來使用。(中間需要?連結)
3、query引數解碼
有編碼就有對應的解碼方法,python3中其對應的解碼方法不是urldecode,而是parse_qs方法。具體如下:
query = 'name=%E9%99%88%E9%9C%B8%E5%A4%A9&sex=male&age=18'
d = parse.parse_qs(query)
print(d) # => {'name': ['陳霸天'], 'sex': ['male'], 'age': ['18']}
注意返回的字典中,其value值都是list物件。這是因為有些鍵可能有多個值的情況。(正常可能會發生的情況)
4、純字串URL編碼
上面方法是對字典物件進行的編碼,如果只需對單個字串內容編碼, 則可以使用quote方法。
s = '中國'
print(parse.quote(s)) # => %E4%B8%AD%E5%9B%BD
5、純字串URL解碼
字串的解碼方法是和編碼方法對應的叫unquote。使用方式如下:
s = '%E4%B8%AD%E5%9B%BD'
print(parse.unquote(s)) # => 中國
BASE64編解碼