一、編碼的兩大方式:
在python3.x中,字符串編碼分為unicode和bytes兩大類編碼方式。
直接書寫s='中國人',這種方式定義的編碼方式為unicode,是通用的方式。
另一種是bytes編碼方式,也就是所謂的二進制編碼,可以分為utf-8,gbk,latin1等方式,但它們都是二進制編碼方式。
unicode編碼與二進制編碼相互之間可以轉化:
unicode.encode('utf-8') unicode轉utf-8編碼
utf-8.decode('utf-8') utf-8編碼轉unicode編碼
二進制編碼的表現形式為添加一個前綴b字符,如b'\xe4\xb8\xad',表示‘中’字。
注意:自己寫二進制文件時,不能包含非ASCII編碼字符,如b=b'中國'是非法編碼,諸如b=b'chinese'是合法編碼。
二、base64編碼:
base64編碼不是加密方式,而是一種編碼方式。是由0-9a-zA-Z及+和/共64個字符(外加一個=號,是填充符,可以說是65個字符)作為基本字符進行編碼。
具體編碼原理見鏈接:base64編碼方式
編碼原理:每一種編碼方式,都最終是用0、1兩個值來組合代表某個字符。由於base64是由64個字符組成的,64可由6個bit值表示。因此,每個字符都是由6個bit表示。通常的英文字符是由8bit表示,中文由16bit表示。因此要將中英文轉化成base64編碼,中英文的總bit值必須要是6的倍數,否則在最后添加0組成6的倍數。最后組成的0會以=號的形式顯示,也就是所謂的填充符號。
三、文本的讀寫:
open('xxx.txt',endcoding='xxx',‘wb')
open函數用來從磁盤中讀取或寫入文本或者二進制數據(圖片,視頻等)。因此分為兩種情況:
1.寫文本:
寫文本時,寫入的內容必須是unicode格式,不能是二進制編碼(如‘中國’.encode('utf-8')這樣的二進制也不行)。但是編碼方式呢,可以通過encoding這個參數來控制。無論是按照哪種方式編碼,寫入txt文件后都是以可讀的方式顯示。
這是因為記事本本身就能夠將不同的編碼格式翻譯成人類可讀的方式。
2.寫二進制文件:
寫二進制文件時,寫入模式必須加上’wb',且不能有encoding參數。由於二進制文件能夠被記事本解讀,因此通過encode()生成的二進制在記事本中也以人類可讀方式顯示。
三、base64加解密:
import base64
text='base64加密參數為二進制格式,返回加密文件也是二進制,解密后的文件也是二進制,必須通過decode()轉化后才可讀'
text=text.encode('utf-8')
text=base64.b64encode(text)#參數值text必須是二進制
print('這是加密后的文本: ',text)
with open('encode.txt','wb') as fp:
fp.write(text)
with open('encode.txt','rb') as fp:
text=fp.read()
text=base64.b64decode(text)#解密后也是二進制
print('這是解密后的文本: ',text)
print('這是轉化成unicode后的原始文本: ',text.decode())#必須轉化后才可讀
執行結果:
這是加密后的文本: b'YmFzZTY05Yqg5a+G5Y+C5pWw5Li65LqM6L+b5Yi277yM6L+U5Zue5Yqg5a+G5paH5Lu25Lmf5piv5LqM6L+b5Yi277yM6Kej5a+G5ZCO55qE5paH5Lu25Lmf5piv5LqM6L+b5Yi277yM5b+F6aG76YCa6L+HZGVjb2RlKCnovazljJblkI7miY3lj6/or7s='
這是解密后的文本: b'base64\xe5\x8a\xa0\xe5\xaf\x86\xe5\x8f\x82\xe6\x95\xb0\xe4\xb8\xba\xe4\xba\x8c\xe8\xbf\x9b\xe5\x88\xb6\xef\xbc\x8c\xe8\xbf\x94\xe5\x9b\x9e\xe5\x8a\xa0\xe5\xaf\x86\xe6\x96\x87\xe4\xbb\xb6\xe4\xb9\x9f\xe6\x98\xaf\xe4\xba\x8c\xe8\xbf\x9b\xe5\x88\xb6\xef\xbc\x8c\xe8\xa7\xa3\xe5\xaf\x86\xe5\x90\x8e\xe7\x9a\x84\xe6\x96\x87\xe4\xbb\xb6\xe4\xb9\x9f\xe6\x98\xaf\xe4\xba\x8c\xe8\xbf\x9b\xe5\x88\xb6\xef\xbc\x8c\xe5\xbf\x85\xe9\xa1\xbb\xe9\x80\x9a\xe8\xbf\x87decode()\xe8\xbd\xac\xe5\x8c\x96\xe5\x90\x8e\xe6\x89\x8d\xe5\x8f\xaf\xe8\xaf\xbb'
這是轉化成unicode后的原始文本: base64加密參數為二進制,返回加密文件也是二進制,解密后的文件也是二進制,必須通過decode()轉化后才可讀