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