Binary <--> ASCII 之編碼

所謂編碼 (encode) 就是把某些符號編上號碼,如此而已。 廣義來說,把 ASCII 字符編上號碼、把 Big-5 字集編上號碼,都是編碼。 但是此處特別指的是把數位資料改編一種特殊的號碼,使得不論原來的資料是什麼類型, 編碼之後一定可以成為純文字文件 (只含 ASCII 的文件)。

早期的電子郵件軟體,包括 MUA 和 MTA,都被設計得只能處理純文字文件, 一旦郵件內容中出現非 ASCII 資料,就有可能導致電子郵件軟體失常。 此外還有一些傳統的網路工具軟體,也都只能接受 ASCII 資料。 因為這些理由,發展出各種編碼規則,使得所有的資料流 (byte stream) 不管是不是 ASCII 都可以被轉換成 ASCII。 在傳送之前,把檔案先編碼成純文字文件;在接收之後,再反向解碼 (decode) 成原來的資料流。

如果不懂得編碼規則,那麼編碼後的文件,的確看起來很神秘,似乎有保密效果。 其實不然。編碼的目的絕非保密,所以其背後都只有非常單純的規則。 為了不浪費計算資源在編碼和解碼上,這些規則當初故意被設計得很簡單。 任何有心人只要做一點實驗,就會發現這些規則。 因此編碼絕不可以拿來當密碼用。

URL

這是伴隨 WWW 而生的編碼,為了讓不同作業系統之間可以順暢地交換網址, 以及指稱不同 OS 之主機內部的檔案樹,所以設計了這套編碼。

Quoted-Printable

如果 E-Mail 的內容大部分是 ASCII,只有少部份不是 (例如是 Latin-1 或 Big-5 碼),那麼這是最方便的編碼。它包留了幾乎所有的 ASCII 碼不變,只把非 ASCII 的部份用其十六進制數字代換。

Base64

如今絕大部分的 MUA 都自動以這個編碼規則處理 E-Mail 的附件。 稍後我們就明白,如果附件本身就已經是純文字文件,那就會浪費空間。

除了應用在 E-Mail 附件之外,base64 也用來編碼非對稱加密系統中之私鑰與公鑰。 這兩支金鑰都是大整數,例如長達 1024 bits。應用軟體通常用 base64 來編碼這 1024 bits, 使得用戶可以用普通編輯器看到這兩支金鑰 (一般來說,看到也沒用)。

UUencode

這是最古老的編碼。早在 1970 年代,UNIX 與 Unix (就是名字當中 UU 的意思) 之間還用普通電話線與數據機連線的時候,就已經發展出來相當複雜的電子郵件、 網路論壇 (news) 這些通訊功能。而當年的通訊,經常靠著 UUencode 和 UUdecode 來傳送可執行檔、圖檔或其他非文字檔案。

BinHex

這是 Mac 家族常用的編碼。

下是兩年前隨便放一點備忘。

base64: A-Z a-z 0-9 + /  (= for padding)
quoted-printable: 0-1 A-F = at end is soft newline, = itself is =3D

Binhex encoding converts an 8-bit file into a 7-bit format, similar to uuencoding. Binhex format
preserves file attributes, as well as Macintosh resource forks, and includes CRC (Cyclic Redundancy
Check) error-checking. This encoding method works on any type of file, including formatted word
processing and spreadsheet files, graphics files, and even executable files (i.e. programs or applications).

Here is a sample of what BinHex actually looks like:

(This file must be converted with BinHex 4.0)
:$f*TEQKPH#jdCA0d,R0TG!"6594%8dP8)3#3"!&m!*!%EMa6593K!!%!!!&mFNa
KG3,r!*!$&[rr$3d,BQPZD'9i,R4PFh3!RQ+!!"AV#J#3!i!!N!@QKUjrU!#3'[q
3"&4&@&483N)f!3#Xaj6bV-H8mJ!!!B3!N!0"!*!$[3#3!cR@iiY)!*!'[I%4!!J
Fp$X%X3@J!mZE6!GRiKUi$HGKMf0U61S46%i1"AB!TI,fLl!d1X3RDDE8ALfTCbM
8UP9p4iUqY-0k4krHpk9XK@`rbj2Ti'U@5rGH@+[fr-i4T6-qXpfl26,k!H5$Nml
TIkI'(l3GI4)f8mII&01CNEbC2LrNLBeaZ1HG@$G8!Z6"k)hh,q9p"r6FC*!!Se"
(ic,Pd(4(b`pflKC`H1&JN5)GVX3mREdH55[l`%`Yhp%q092c`A(hPV)!83Dr&f4
$$L#I1aM-"VjqV-q$34KQq6$M$f8#,Zc,i),!(`*ZN!$K$rS!LA%3cL+dYi"@,K(
Z"`#3!fKi!!!:

Note that all lines other than the header and the last line are exactly 64 characters long (not counting the
newline characters). If you receive a file in email containing lines of varying lengths, then someone's mail
system may have damaged the file and you'll probably need to have it resent.

課外讀物:
[1] 關於 BinHex 的介紹與工具整理 http://www.natural-innovations.com/boo/binhex.html


[ 發表感想或意見 ] ‧ [ 讀者推薦課外讀物 ]
單維彰 (00/11/11) --- 02/11/05 (單)