Quoted-printable

Quoted-printableQP encoding,沒有規範的中文譯名,可譯為可列印字元參照編碼使用可列印字元的編碼。Quoted-printable是使用可列印的ASCII字元(如字母、數字與「=」)表示各種編碼格式下的字元,以便能在7-bit數據通路上載輸8-bit數據, 或者更一般地說在非8-bit clean媒體上正確處理數據[註 1]。這被定義為MIME content transfer encoding,用於e-mail

QP使用「=」開頭的跳脫字元. 一般限制行寬為76,因為有些軟件限制了行寬.

綜述

MIME定義了在e-mail中傳送各種資訊的方法, 包括非英語的其它語言文字資訊, 使用非ASCII的其它字元編碼。這些編碼常常使用ASCII範圍以外的值來編碼字元,因此需要進一步被編碼以便適用於non-8-bit-clean環境。Quoted-printable編碼就是把任意位元組序列對映為ASCII字元序列。Quoted-printable自身並不是一種字元編碼方案, 而是一種在面向位元組的編碼時的數據編碼佈置(data coding layer),即由編碼的字元序列如何表示為位元組流QP是可逆的,即可以由原來的非ASCII字元流與QP編碼後的位元組流來迴轉換而不失資訊。

Quoted-printable與Base64是兩種基本的MIME內容傳輸編碼, 如果通常的「8bit」編碼不適用。如果文字不含很多非ASCII字元,quoted-printable編碼的結果的可讀性相當好[註 2]而且緊湊。但是,如果輸入的大多數是非ASCII字元,那麼quoted-printable編碼將變得既不可讀又非常低效。Base64並不是人可讀的,但對於所有數據其成本均勻,適用於二進制數據與非拉丁字母語言文字。

Quoted-printable編碼

任何8-bit位元組值可編碼為3個字元:一個等號「=」後跟隨兩個十六進制數字(0–9或A–F)表示該位元組的數值。例如,ASCII碼換頁符(十進制值為12)可以表示為「=0C」, 等號「=」(十進制值為61)必須表示為「=3D」。除了可列印ASCII字元與換行符以外,所有字元必須表示為這種格式。

所有可列印ASCII字元(十進制值的範圍為33到126)可用ASCII字元編碼來直接表示, 但是等號「=」(十進制值為61)不可以這樣直接表示。

ASCII的水平制表符(tab)與空格符, 十進制為9和32, 如果不出現在行尾則可以用其ASCII字元編碼直接表示。如果這兩個字元出現在行尾,必須QP編碼表示為「=09」(tab)或「=20」(space)。

如果數據中包含有意義的行結束標誌,必須轉換為ASCIIEnter(CR)換行(LF)序列,既不能用原來的ASCII字元也不能用QP編碼的「=」跳脫字元序列。 相反,如果位元組值13與10有其它的不是行結束的含義,它們必須QP編碼為=0D與=0A。

quoted-printable編碼的數據的每行長度不能超過76個字元。為滿足此要求又不改變被編碼文字,在QP編碼結果的每行末尾加上「軟換行」(soft line break)。即在每行末尾加上一個「=」, 但並不會出現在解碼得到的文字中。這種軟換行也適用於文字的行非常長,超過了軟件限制(例如,某些SMTP軟件要求最大行長為1000個字元),這也是RFC 2821允許的。

一個輕微修改的quoted-printable用於訊息頭(message header);參見MIME#Encoded-Word

例子

If you believe that truth=3Dbeauty, then surely=20=
mathematics is the most beautiful branch of philosophy.

這是上述字串的QP解碼:

If you believe that truth=beauty, then surely mathematics is the most beautiful branch of philosophy.

類似編碼方法

註釋

  1. ^ 歷史上,e-mail過去被認為是non-8-bit-clean, 因為不同的媒體被用來傳輸處理e-mail,有的並不是Internet. 現代ESMTP伺服器是8-bit clean在大多數情況,參見8BITMIME.
  2. ^ 這意味着使用了一種ASCII相容編碼。而文字例如是EBCDIC編碼的,QP編碼後當然就不可讀了。

參考文獻

外部連結

參見