<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    春天花會開

    ***********

    統計

    留言簿(4)

    閱讀排行榜

    評論排行榜

    [轉載]MIME郵件的編碼方式

    轉自:http://book.csdn.net/bookfiles/402/10040214756.shtml

    MIME郵件的編碼方式

    由于每個ASCII碼字符只占用一個字節(8個bit位),且最高bit位總為0,即ASCII碼字符中的有真正意義的信息只是后面的7個低bit位,而傳統的SMTP協議又是基于ASCII碼字符設計的,因此,一些基于傳統SMTP協議設計的SMTP服務器在處理郵件內容時只取出每個字節中的7個低bit位進行處理,而將最高bit位忽略不計。顯然,這樣的SMTP服務器在處理包含有非ASCII碼字符的郵件內容時,會出現嚴重的問題,這就限制了郵件中只能出現英文的ASCII碼字符,而不能出現中文字符或二進制數據。

    為了能夠在郵件內容中包含中文、圖像或聲音等非ASCII字符的數據,人們想到了采用某種編碼方式將非ASCII字符的數據轉換成可打印的ASCII字符后再發送,郵件閱讀程序則按照相應的解碼方式從郵件中還原出原始數據即可,比較常用的兩種郵件編碼方式為BASE64和Quoted-printable。后來的擴展SMTP協議允許直接在郵件中傳遞二進制數據,而不用對它們進行郵件編碼,人們將這種沒有進行郵件編碼的二進制數據的郵件內容稱為8bit編碼,為了與此相區別,人們將沒有進行郵件編碼的純ASCII碼字符的郵件稱為7bit編碼。MIME消息體的郵件編碼方式通過MIME消息頭中的Content- Transfer- Encoding頭字段指定,每種郵件編碼方式的介紹如下:

    —  7Bit

    指消息體內容全部是沒有經過編碼的ASCII字符。

    —  8Bit

    指消息體內容是沒有經過編碼的原始數據,且其中包含有非ASCII字符的數據?,F在的郵件服務器基本上都支持8Bit編碼,使用支持8Bit編碼的郵件服務器可以簡化郵件的處理過程。

    —  BASE64

    Base64是將二進制數據轉換成可打印的ASCII字符的一種最常見的編碼方式,它的基本原理是將一組連續的字節數據按6個bit位進行分組,然后對每組數據用一個ASCII字符來表示。6個bit位最多能表示26=64個數值,因此可以使用64個ASCII字符來對應這64個數值,這64個ASCII字符為:

    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

    其中每個字符表示的數值就是該字符在上面的排列中的索引號,索引號從0開始編號。假設在內存中有如下三個連續的字節數據:

    [0110,0001] [0110,0010] [0110,0011]

    將它們按6個bit位進行分組后的形式如下:

    [0110,00] [01,0110,] [0010,01] [10,0011]

    分組后得到了四組數據,每組數據對應的十進制數值分別為24、22、9、35,它們分別對應Y、W、J、j這四個字符,所以,對[0110,0001] [0110,0010] [0110,0011]這三個字節的數據進行BASE64編碼后的結果是“YWJj”。

    BASE64編碼要求把3個8位字節(即24個bit)的數據轉化為4個6位字節(也是24個bit)的數據,如果原來的8位字節數據的字節個數不能被3整除,其余數只能是1或2,那么如何對余下的1個或2個8位字節數據進行處理呢?對于這種情況,仍然按6個bit位對剩余的字節進行分組,在最后不夠6個bit位的內容后面添加幾個為0的bit位來湊成6個bit位,例如,如果最后剩下的一個8位字節的內容如下:

    [0110,0001]

    對它進行分組后的結果如下:

    [0110,00] [01,0000]

    其中用黑斜體標識的0為填充的bit位,所以,最后剩下的這個字節的BASE64編碼結果為“YQ”。BASE64編碼還有規定,如果編碼后的整個結果文本的字符個數不是4的整數倍,那么需要在最后填充“=”字符來湊成4的倍數,所以,在最后這個字節編碼的結果后面還要添加兩個“=”字符,即“YQ==”。顯然,如果最后剩下兩個8位字節的內容,它可以被編碼成三個字符,最后還需要添加一個“=”字符。對一大段數據進行BASE64編碼時,可以在編碼結果中的適當位置加入回車換行,MIME規范建議BASE64編碼結果中的每行最多76個字符。

    —  Quoted-printable

    Quoted-printable也是一種將二進制數據轉換成可打印的ASCII字符的編碼方式,它對ASCII字符不進行轉換,只對非ASCII字符的數據進行編碼轉化。每個非ASCII字符的字節數據,都被轉換成一個"="號后跟這個字節的十六進制數據,例如,“ab中國”的Quoted-printable編碼結果為“ab=d6=d0=b9= fa”。顯然,由于"="號在Quoted-printable編碼中具有的特殊意義,所以,原始數據中的"="號字符也需要進行編碼轉換,用“=3d”表示。

    對一大段數據進行Quoted-printable編碼時,可以在編碼結果中的適當位置加入回車換行,在回車換行前需要額外再加入一個“=”字符,以表示后面的換行是因編碼而造成的軟回車,而非原始數據中原有的回車換行。例如,對于下面一段Quoted-printable編碼后的數據:

    =D5=E2=CA=C7=CD=A8=D0=C5=B5=C4=B3=CC=D0=

    =F2, =C7=EB=D6=B8=BD=CC!

    在第一行末尾的“=”字符和換行,都是由于編碼后生成的。



    posted on 2008-07-31 10:52 春天花會開 閱讀(2661) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲性无码AV中文字幕| 亚洲精品成人图区| 免费的黄网站男人的天堂| 国产精品成人免费视频网站京东| 久久久亚洲精品视频| 免费黄网站在线看| 水蜜桃亚洲一二三四在线| 97在线视频免费| 亚洲手机中文字幕| 精品免费国产一区二区| 亚洲AV电影天堂男人的天堂| 亚洲视频在线免费| 三级网站在线免费观看| 亚洲精选在线观看| 免费人成在线视频| MM1313亚洲精品无码久久| 久久亚洲国产精品123区| 黄网站色视频免费在线观看的a站最新| 亚洲国产高清人在线| 国产成在线观看免费视频| 亚洲AV成人一区二区三区观看| 亚洲av手机在线观看| 两个人看的www免费视频中文| 亚洲国产精品久久久久婷婷老年| 91免费精品国自产拍在线不卡| 美女黄频a美女大全免费皮| 亚洲熟妇丰满多毛XXXX| 91精品免费在线观看| 美景之屋4在线未删减免费| 久久精品国产亚洲av麻| AV片在线观看免费| www免费黄色网| 亚洲一卡2卡3卡4卡国产网站| 吃奶摸下高潮60分钟免费视频| 免费无码一区二区三区蜜桃 | 波多野结衣免费一区视频| 91亚洲国产成人精品下载| 国产又大又粗又硬又长免费 | 免费av欧美国产在钱| 色屁屁在线观看视频免费| 亚洲午夜免费视频|