<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)  編輯  收藏


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


    網站導航:
     
    主站蜘蛛池模板: 国产性生交xxxxx免费| 全免费a级毛片免费看无码| 亚洲人成电影网站国产精品| 亚洲av日韩专区在线观看| 午夜影视在线免费观看| 亚洲精品中文字幕| 免费国产美女爽到喷出水来视频| 丰满亚洲大尺度无码无码专线| 国产色爽免费视频| 污视频网站免费观看| 亚洲综合另类小说色区| 精品国产免费一区二区三区香蕉| 国产V亚洲V天堂无码| 一级毛片**不卡免费播| 亚洲成年人免费网站| 免费A级毛片无码免费视| 亚洲第一综合天堂另类专| 又粗又硬又黄又爽的免费视频 | 最近国语视频在线观看免费播放 | 亚洲中文无码永久免费 | 亚洲综合一区无码精品| 国产在线19禁免费观看| 人妖系列免费网站观看| 亚洲AV综合色区无码一区爱AV | 日韩电影免费观看| 亚洲一区在线视频| 一本久久综合亚洲鲁鲁五月天| 一级免费黄色毛片| 亚洲av成人无码久久精品| 成人午夜性A级毛片免费| 免费一区二区无码视频在线播放| 久久亚洲国产欧洲精品一| 免费一本色道久久一区| 免费无码婬片aaa直播表情| 亚洲福利在线观看| 日韩在线a视频免费播放| 成人久久免费网站| 亚洲第一男人天堂| 亚洲国产第一站精品蜜芽| 中文字幕无码成人免费视频| 一区二区免费电影|