国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python使用base64模塊進行二進制數據編碼詳解

2020-02-16 11:34:58
字體:
來源:轉載
供稿:網友

前言

昨天團隊的學妹來問關于POP3協議的問題,所以今天稍稍研究了下POP3協議的格式和Python里面的poplib。而POP服務器往回傳的數據里有一部分需要用到Base64進行解碼,所以就順便看了下Python里面的base64模塊。

本篇先講一下base64模塊,該模塊提供了關于Base16,Base32,Base64,Base85和Ascii85的編碼和解碼相關的函數。有關poplib模塊的內容,會在后面發上來。嗯,又挖了一個坑,這輩子挖的坑填不完了...

以下內容摘自http://bbs.chinaunix.net/thread-1150250-1-1.html,詳細說明了為什么回傳的數據會先經過Base64編碼:

由於歷史原因,Internet上有些郵件系統只支援7Bit的字元傳輸,而漢字的內碼是8Bit的,當在電子郵件中發送中文時,如果經過這些只支援7Bit字元的郵件系統,便會將漢字內碼的第八位元的1全部變成0。
以”中文”兩字為例,HEX為A4A4A4E5,當最高位元被清掉時就會變成24242465,也就是”$$$e”。telnet也存在這樣子的問題。

除了中文郵件外,使用電子郵件傳送圖片、程式、壓縮文件等也會發生這個問題。所以在電子郵件中一般採用各種郵件編碼方式來解決這個問題,將8Bit按照一定的規則進行編碼,便可以完好地通過只支持7Bit字元的郵件系統。

常見的郵件編碼有UU與MIME,而MIME(Multipurpose Internet Mail Extentions)一般翻譯成「多媒體傳送模式」,顧名思義,它標榜的就是可以傳送多媒體型式的檔案,可以在一封mail中附加各種型式檔案一起送出。

MIME定義兩種編碼方法:Base64與QP(Quote-Printable),兩者使用時機不同,QP的規則是對於資料中的7bits無須重複encode,僅8bits資料轉成7bits。QP編碼適用於非US-ASCII的文字內容,例如我們的中文檔案,而Base64的編碼規則,是將整個檔案重新編碼,編成7bits,它是用於傳送binary檔案時使用。由於編碼的方式不同,會影響編碼之後的檔案大小。有些較懶惰的軟體便都一律採用Base64編碼了。

Base64

base64模塊提供了6個函數用于Base64的編碼和解碼,可以將他們分為三組。

base64.b64encode(s, altchars=None)
base64.b64decode(s, altchars=None, validate=False)

參數s代表需要編碼/解碼的數據。其中b64encode的參數s的類型必須是字節包(bytes)。b64decode的參數s可以是字節包(bytes),也可以是字符串(str)。

由于Base64編碼后的數據中可能會含有'+'或者'/'兩個符號,如果編碼后的數據用于url或者文件系統的路徑中,就可能會導致Bug。所以base64模塊提供了將編碼后的數據中'+'和'/'進行替換的方法。

參數altchars必須是長度為2的字節包,這兩個符號會用于替換編碼后數據中的'+'和'/'。這個參數默認是None。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 漯河市| 玉环县| 登封市| 嘉黎县| 简阳市| 开江县| 红桥区| 叙永县| 海阳市| 阿城市| 和林格尔县| 贺州市| 巫山县| 聊城市| 增城市| 阜康市| 锡林浩特市| 长子县| 康平县| 江山市| 盘山县| 南充市| 建始县| 义马市| 炉霍县| 三台县| 肃南| 乌什县| 长海县| 漾濞| 博客| 娱乐| 凭祥市| 阿拉善右旗| 兴义市| 泰顺县| 和龙市| 承德市| 兴和县| 双桥区| 正镶白旗|