郵件編碼Content-Transfer-Encoding的各種形式?
為什么有這么多,,只用一種不行嗎,?比如有的是:base64,有的是:8bit,有的是:quoted-printable
什么時候用什么編碼呀,?
由於歷史原因,,Internet 上有些郵件系統(tǒng)只支援 7Bit 的字元傳輸, 而漢字的內(nèi)碼是 8Bit 的,,當(dāng)在電子郵件中發(fā)送中文時,, 如果經(jīng)過這些只支援 7Bit 字元的郵件系統(tǒng),, 便會將漢字內(nèi)碼的第八位元的 1 全部變成 0,。
以 "中文" 兩字為例,HEX 為 A4A4A4E5,, 當(dāng)最高位元被清掉時就會變成 24242465,,也就是 "$$$e"。 telnet 也存在這樣子的問題,。
除了中文郵件外,使用電子郵件傳送圖片,、程式,、 壓縮文件等也會發(fā)生這個問題。 所以在電子郵件中一般採用各種郵件編碼方式來解決這個問題,, 將 8Bit 按照一定的規(guī)則進行編碼, 便可以完好地通過只支持 7Bit 字元的郵件系統(tǒng),。
常見的郵件編碼有 UU 與 MIME,,而 MIME (Multipurpose Internet Mail Extentions) 一般翻譯成「多媒體傳送模式」,, 顧名思義,,它標(biāo)榜的就是可以傳送多媒體型式的檔案,, 可以在一封mail中附加各種型式檔案一起送出,。
MIME 定義兩種編碼方法:Base64 與QP(Quote-Printable),, 兩者使用時機不同,,QP 的規(guī)則是對於資料中的7bits無須重複encode, 僅8bits資料轉(zhuǎn)成7bits,。QP編碼適用於非US-ASCII的文字內(nèi)容,, 例如我們的中文檔案,而Base64的編碼規(guī)則,,是將整個檔案重新編碼,, 編成7bits,它是用於傳送binary檔案時使用,。 由於編碼的方式不同,,會影響編碼之後的檔案大小。 有些較懶惰的軟體便都一律採用Base64編碼了,。
一個例子:
Return-Path:
Delivered-To:
[email protected]
X-WM-Delivered:
[email protected]
Received: from server ([9.9.9.10])
(envelope-sender )
by 9.9.9.10 with ESMTP
for ; Tue, 08 Apr 2008 14:03:35 +0800
Message-ID:
From: "test"
To:
Subject: sssee
Date: Tue, 8 Apr 2008 14:03:34 +0800
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_NextPart_000_0825_01C89981.55C7FDA0"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.3790.3959
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.4133
X-P3Scan: Version 2.3.2 by /
This is a multi-part message in MIME format.
------=_NextPart_000_0825_01C89981.55C7FDA0
Content-Type: text/plain;
charset="gb2312"
Content-Transfer-Encoding: base64
c3Nlc2VzZQ==
------=_NextPart_000_0825_01C89981.55C7FDA0
Content-Type: text/plain;
name="ccc.txt"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="ccc.txt"
eeeeeeeeeeeeer
------=_NextPart_000_0825_01C89981.55C7FDA0--
.
(“.”是郵件結(jié)束的標(biāo)志) |
|
|