簡體   English   中英

SMTP 是否傳輸 7 位或 8 位字符(是否清除 MSB?)

[英]Does SMTP transfer 7bit or 8bit characters (clear MSB or not?)

我的理解是,最初的 SMTP 協議被定義為只使用 7 位來限制字符的傳輸,以節省傳輸成本。

該協議已有近 40 年的歷史,從那時起,多個 RFC 擴展了標准。

出於兼容性原因,許多(如果不是大多數)8 位清潔的現代服務器將消息轉換為“7 位兼容”格式,例如引用打印或 base64。

所以從技術上講,所有字符都是 7 位 ASCII。

然而,我的問題的關鍵是,即使數據以 7 位友好的方式編碼,這是否意味着 SMTP 服務器之間的物理位傳輸以 7 位為單位發生,還是以 8 位為單位發生?

我的假設是它以 8 位發生,即使數據是用 ASCII 編碼的。 這樣對嗎?

以下是我找到的一些相關鏈接:

<< 用戶每年發送數十億條 8 位消息。 據我所知,所有服務器都可以處理 8 位消息。 幾年前,我能夠找到一些運行古老的 7 位版本 sendmail 的主機,但現在我看不到任何主機了。>>

http://cr.yp.to/smtp/8bitmime.html

<< 然而,實際上,主體通常使用所有八位進行編碼。 >>

https://www.ibm.com/support/knowledgecenter/en/SSB27U_6.4.0/com.ibm.zvm.v640.kiml0/smtmlfr.htm

<< 這在實踐中不會引起問題,因為幾乎所有現代郵件中繼都是 8 位清潔的 >>

https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol#8BITMIME

更新

我的問題的改進應該說明為:今天的 SMTP 服務器是否仍然清除高位,並僅使用低七位對 7 位 ASCII 進行編碼,或者他們實際上使用完整的八位字節,從而對 MSB 產生影響?

我認為您要問的是:“SMTP 客戶端在向 SMTP 服務器發送消息時是否會移動位,以便每個字符僅使用 7 位,而第 8 位是下一個字符的開始?”

如果是這樣,沒有。 情況從未如此。

從一開始,SMTP 客戶端/服務器就一直使用每個字符的所有 8 位。

換句話說,SMTP 客戶端和服務器使用 ASCII 字符編碼,其中不包括 8 位字符編碼(如 ISO-8859-1)中的重音字符。 ASCII 編碼中值大於 127 的字符被視為未定義。

造成這種情況的原因可能有很多:

  1. ASCII 易於支持
  2. 每個語言環境都有自己喜歡的擴展字符編碼,這些編碼與其他語言環境不兼容——其中一些需要不止一個字節來表示一個字符。
  3. 我不確定 UTF-8 是否存在(但多字節 unicode 確實存在,我認為 - 例如 UCS2 / UTF-16)
  4. 期望有這么多軟件在所有廣泛使用的字符集之間實現字符集轉換是困難和不現實的(Unicode 和字符集轉換庫當時還沒有那么廣泛)
  5. MIME、SMTP 等之前的“MESSAGE”規范是為美國“互聯網”編寫的,可能不需要 ASCII 之外的任何東西(因此原始消息規范,例如 rfc0822 和更早的版本沒有定義編碼機制)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM