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)。

如果數據中包含有意義的行結束標誌,必須轉換為ASCII回車(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編碼後當然就不可讀了。

參考文獻

外部連結

參見