> email | 可讀 | mime <
// 使用 Quoted-Printable 將包含中文與特殊字元的郵件內容進行 MIME 編碼,同時保留純文字可讀性
維持文字可讀
ASCII 範圍的內容保持為一般純文字,直接檢視郵件原始碼時仍能看懂多數正文內容。
MIME 郵件標準
遵循 MIME Content-Transfer-Encoding 規範,適用於支援多語系的郵件伺服器與用戶端。
支援 Unicode
支援 UTF-8 等編碼,安全地傳輸中文、表情符號與其他多國語系文字。
>> 技術說明
Quoted-Printable 的運作方式:
Quoted-Printable 使用可列印的 ASCII 字元來表示 8 位元資料。非 ASCII 位元組會被編碼為「=XX」(兩位十六進位數),單行通常限制在 76 個字元內,並可透過行尾的「=」實現軟換行。
範例:
"Café" → Caf=C3=A9
為什麼使用 Quoted-Printable:
- >需要在郵件原始碼中保留可讀性與除錯友善性
- >郵件內容以英文/ASCII 為主,僅混入少量中文或特殊字元
- >目標系統仍有行長限制或 7 位元傳輸限制
- >需要在日誌或歸檔中直接搜尋與閱讀郵件正文
- >必須嚴格遵循 MIME 郵件與舊式 SMTP 流程
>> 常見問題
什麼是 Quoted-Printable 編碼?
Quoted-Printable 是 MIME 所定義的一種內容傳輸編碼方式,用於在僅支援 7 位元傳輸的郵件系統中安全傳輸 8 位元資料,同時儘量保留文字的可讀性。
什麼時候適合使用 Quoted-Printable?
適合正文主要為純文字(例如英文或程式碼),但包含少量中文或特殊字元,需要同時兼顧可讀性與協定相容性時。
它與 Base64 有何差異?
Base64 會將所有內容編碼成不可直接閱讀的字串,而 Quoted-Printable 僅對非 ASCII 字元轉義,更利於在除錯或檢視原始郵件時快速了解內容。
Quoted-Printable 中的「=」代表什麼意思?
「=」 是轉義前綴,後續兩個十六進位數字代表一個位元組;若出現在行尾,則表示邏輯行延續至下一行(軟換行)。
// 速查表
| Input | Output | Note |
|---|---|---|
| = | =3D | = is the escape char |
| é (UTF-8 C3 A9) | =C3=A9 | each byte of a multi-byte char |
| space/tab at end of line | =20 / =09 | trailing whitespace |
| = at end of line | (soft line break) | joins lines, max 76 chars/line |
| A–Z a–z 0–9 ! * + - / etc. | as is | printable ASCII 33–126 (except =) |
// 程式碼範例
Input Café = 3 € (UTF-8)
Output Caf=C3=A9 =3D 3 =E2=82=AC
Rules RFC 2045 section 6.7
* bytes 33..126 except '=' may stay literal
* everything else -> '=' + two uppercase hex digits
* encoded lines must not exceed 76 characters
* a line ending in '=' is a soft break (no newline in the decoded data)
MIME Content-Transfer-Encoding: quoted-printable
>> 更多問題
問:Quoted-Printable 用在哪裡?
答:用於以 ASCII 為主、夾雜少量特殊字元的電子郵件內容(MIME)。文字保持可讀,只有其餘位元組編碼為 =XX。標頭為 Content-Transfer-Encoding: quoted-printable。
問:什麼是軟換行?
答:行尾的「=」。它允許把長行折成最多 76 個字元,而解碼時不會產生換行,各行只是被重新接起。
問:該用 Quoted-Printable 還是 Base64?
答:以拉丁文為主的文字適合 QP:開銷小且可讀。二進位資料或非 ASCII 文字更適合 Base64,固定開銷約 33%;QP 最壞情況下每位元組需 3 個字元。