最近筆者偶爾會收到一些經過編碼的電子信件;由於筆者通常是使用 Telnet 連上
網路主機,並用 UNIX上的「mail」指令來看信,所以看到的常是如下面所示的訊息
;因為筆者並不像星際大戰中那個機器人「阿圖」一樣,精通五、六百種星際語言,
所以這樣的內容對筆者而言,無異是「天書」,怎麼看都看不懂。
=ACK=A6=B3=A6=CA=AA=E1=AC=EE=A6=B3=A4=EB
=AEL=A6=B3=B2D=AD=B7=A5V=A6=B3=B3=B7
=ADY=B5L=B6=A2=A8=C6=B1=BE=A4=DF=C0Y
=ABK=ACO=A4H=B6=A1=A6n=AE=C9=B8`
為什麼筆者會收到這樣的信件呢?筆者猜想,大概是有些朋友在使用電子郵遞程式
(如 Eudora)時,忘了將「QP」(Quoted Printable)轉碼的功能關閉(Eudora
的 QP 設定在選項 Special 的 Switches 內),或是使用 Netscape (一種 WWW
Browser)的 mailto 直接送電子信件給筆者;所以這些信件才會經過 QP轉碼。今
天,如果筆者沒有一個可以接收這樣轉碼的電子郵遞程式,那麼將可能無法解讀這
個信件了。
相信大多數的讀者已經知道「多媒體」郵遞服務系統(如資策會資技處開發的
Acacia Mail)即將風行起來了,利用符合「MIME」(Multipurpose Internet Mail
Extensions)格式的電子郵遞服務,您便可以輕鬆地用來傳送一些圖片檔(gif、jpg
、bmp)、影像檔(mpg、mov)、聲音檔(av)、執行檔(exe)、壓縮檔(zip、tar)
等等;而我們所使用的 8 位元中文碼在經過轉碼後,也可以暢行於各國的 Internet
間了。(中文碼信件在台灣境內傳送時,並不需經過轉碼,因為台灣的 Mail 伺服器
大都接受 8 位元的中文信件)
MIME 的規格定義主要是在 RFC 1521,其中談到了五種編碼格式;RFC 1521 中並推薦
QP 轉碼用在非 ASCII 的文字內容(如中文信件),而 Base64 則用來做為圖片、影
像、聲音、執行檔等的編碼方式。
在談 QP 轉碼前,讀者們必須知道,唯有 ASCII 文字、經過 QP 轉碼或是 Base64 轉
碼的電子信件,才能安全有效地通過所有 Internet 上的 MTA (Message Transfer
Agent)而送抵對方。(有關 MTA,請讀者自行研究 RFC 821)
現在我們就來簡單地談談這個 QP 編碼的方式。
QP 轉碼其實非常簡單,它的主要規則只有幾個:
(1)將一個字元用兩個十六進位法的數值(digit)表示,然後前面再加上一個「=」
(等號)字元;除非這個字元符合下面其他的規則。(十六進位法數值為:
0123456789ABCDEF)比如原先 ASCII 的「=」(等號)字元,其十進位數值是
61,十六進位數值為 3D,所以經過 QP 轉碼後,變成了「=3D」;而 ASCII
的「空白」(space)字元經轉碼後,會變成「=20」。
(2)字元的數值(十進位法)介於 33 到 60、及 62 到 126 者不必經過轉碼。
(61 是「等號」)
(3)字元 TAB 或 SPACE 可以不經轉碼,但是不經轉碼的 TAB 或 SPACE 不可以放在
轉碼後每行字串的最後;也就是說轉碼後的內容,一行字串中如果有 TAB 或
SPACE 的話,這個 SPACE 或 TAB 的後面一定還有其它的字元。
(4)原先內容中的「斷行」(line break),應該要依照 RFC 822 的定義,編碼為
CRLF(Carriage Return & Line Feed);但是對於純文字內容(plain text),
則允許 local 系統用 newline 取代 CRLF。
(5)編碼後,每行的字數不可以超過 76 個字元(不包括 CRLF 在內);如果原先一
行列的內容無法用 76 個字元表示,那麼就要拆成數行,並建立「soft link」。
「soft link」就是在編碼後的一行的最後加上一個「=」(等號),表示下一行
的內容和這一行的內容,原先是相連接的。比如
Hi, I am Lin Jyun-Naih. How are you today?
經 QP 編碼後,可能如下:(第一行最後的等號,代表 soft link)
Hi, I am Lin Jyun-Naih. =
How are you today?
現在,您可以依照這些規則來解讀本文剛開始時的那串怪文了嗎?它們是:
春有百花秋有月
夏有涼風冬有雪
若無閒事掛心頭
便是人間好時節
各位讀者,您轉碼對了嗎!?
|