QP编码详解
“?介紹Quote-Printable編碼。”
MIME定義了兩種編碼方法,其中一種是BASE64,另一種是Quote-Printable,即QP編碼。前一種大家應該很熟悉,而后一種相對陌生。
前面已經介紹過MIME格式:
MIME格式解析
本文將介紹QP編碼。
01
—
原理
QP編碼是一種使用可打印的ASCII字符 (如字母、數字與"=")表示各種編碼格式下的字符。其方法是將一個8bit的字符表示成兩個16進制數,并在前面加一個“=”,共三個ASCII字符。
經過QP編碼后的數據,通常是下面這個樣子:
=E5=8D=8F=E8=AE=AE=E5=88=86=E6=9E=90=E4=B8=8E=E8=BF=98=E5=8E=9F
對QP編碼而言,所有ASCII字符都可以直接用ASCII字符編碼來直接表示,但是有一個例外,就是字符“=”,它將在QP編碼中根據其十進制值被編碼為“=3D”,因為它在編碼過程中被使用。
另外,對制表符和空格符,即tab和space,雖然規定如果不出現在行尾可以用其ASCII字符編碼直接表示,在行尾才需要被編碼,但是實際應用中基本上都是統一處理,分別表示為“=09”(tab)和“=20”(space)。
而數據中的換行,即行結束標志,則需要轉換為回車加換行,最終為0x0d0x0a,而最終的編碼則是“=0D=0A”。
QP編碼規定編碼后的數據每行不能超過76個字符。當超過這個限制時,將在編碼結果中使用軟換行進行分行,即每75個字符后增加一個“=”,然后再接上換行CRLF,之后開始新的一行,這個“=”在解碼的時候并不會解出任何數據。
02
—
例子
回頭再看上文中的QP編碼數據:
=E5=8D=8F=E8=AE=AE=E5=88=86=E6=9E=90=E4=B8=8E=E8=BF=98=E5=8E=9F
解碼后即為"協議分析與還原"UTF8編碼,每三個字節表示一個漢字:
可以看出,對QP編碼進行解碼相當簡單,即將可見字符中除行結束外的每個“=”之后的兩個ASCII字符直接當成一個16進制數值進行處理即可。
至于解QP編碼的工具,網上很多,這里給一個:
http://web.chacuo.net/charsetquotedprintable
有什么問題,可聯系我交流。
長按進行關注。
總結
- 上一篇: 从新手到入门,如何进入协议分析的世界
- 下一篇: HTTP协议中的chunked编码解析