1. 程式人生 > >python3url編解碼base64編解碼ASE加解密

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編解碼