Big5-UAO 細說從頭

台灣的 BBS 到現在還很紅。

當然,BBS 系統幾乎都不是 Unicode 環境,只支援 Big5。(要轉換成 UTF-8 的話,2 bytes 的雙色字要怎麼處理會變成棘手的問題。)

身為次文化集中地的BBS,自古以來就大量討論著同是次文化的動漫畫、JPOP等話題,於是BBS用戶也一直想盡辦法使用各種造字檔方式(例如櫻花輸入法)來解決假名顯示的問題。(而假名是使用Big5-Eten規格)

其中我所搞出的「Unicode補完計画」,在2001年推出了。

 

當年,Unicode 架構的 Windows XP 開始普及,也同時衍生了很多問題。

首先,不知道為什麼 Arial Unicode MS 在 Unicode PUA(造字區)裡塞了一堆很像泰文的字,偏偏優先性又比使用者造字來得高,所以有些造字檔的假名被忽略,顯示成莫名其妙的符號(像是「お」),使得Big5下的日文變得有點難閱讀。

其次,Unicode 裡本來就包括假名。例如日文網站上使用的假名,姑且稱它為「真假名」。而要看到 BBS 上的日文,則需要使用造字檔的假名,通常稱作「Big5假名」。但這其實非常難懂,「明明都是假名怎麼複製貼上會變亂碼!」「明明都是假名怎麼需要使用不同輸入法!」,對於非專業的電腦使用者來,這太複雜了。

而在 Unicode 架構的 Windows XP 下,系統字型的新細明體就包含漂亮的真假名文字,而那些造字檔的假名其實滿醜的。

於是我不知道哪根筋不對,忽然想到那為什麼不乾脆直接把 Big5 假名對應到 Unicode 的真假名碼位上呢? 於是就開始改造 Windows XP 的系統轉碼表,這就是「Unicode補完計画 1.0」。就是在納莉颱風那一天,外面雨太大,待在宿舍一天搞出來的。

 

公開以後,意外地馬上大紅。

 

總之在 BBS 上實在太方便了。本來造字檔模式的假名,雖然可以閱讀,但輸入時要用不同輸入法,從日文網站複製貼上時也會亂碼。每次都要慢慢用轉換軟體轉過才能貼,或是只好自己重新每個字打出來。但把「真假名」與「Big5假名」統一起來以後,假名可以直接複製貼上了,輸入可以直接用 MS-IME 了,好處太多了。

在 BBS 之外,當年所流行的 MP3 播放軟體 Winamp、CD 燒入軟體 NERO 等等,都還沒支援 Unicode,碰到真日文的檔名,不能播放、不能燒錄,安裝Unicode補完計画後能解決很多問題。

 

一個月後,我又公開了「Unicode補完計画1.5」。這是「漢字單向對應」的版本,例如本來 Big5 的對應上,Unicode 的「来」字並不存在於 Big5,所以對應到「?」,而我把它改成對應到「來」。也就是說把 Unicode 的「来」跟「來」都對應到 Big5 的「來」(Unicode相容漢字顛倒的作法?)。我想字碼專家大概都會幹翻這種對應方式,但為什麼我要做出這種東西,到頭來還是為了方便剪下貼上。

1.0 雖然解決了假名剪貼的問題,但日本的漢字想當然耳還是會亂碼。為了支援「来」這些漢字,理論上只能創造新的 Big5 外字集。當時,我猶豫半天的結論是,還是不要再定義新的文字碼位比較好。這樣做才不會產生新的 Big5 變種,對於資訊的交換比較不會造成影響(畢竟假名的部分至少還是根據 Big5-Eten 標準)。結果只好把日文漢字硬是對應到繁体字上,做出了這個詭異的轉換表。

 

大約一年後,軟體中文化聯盟的 witch 與我聯絡,說是用了跟我一樣的方法,把整個「中國海字集」所有文字的對應表給做出來了。

「中國海字集」也是個從 DOS 時代(倚天中文系統)開始就廣為使用的外字集,不只包括日文漢字,還包含了中國簡化字、各種圖案文字等等,是非常豊富的外字集,直到 Windows 95 流行後,推出的 TrueType 版本造字檔同樣廣為流傳。(但大約在2000年前後公司解散,著作權關係也模糊不清了。)

而在BBS上,愛用中國海字集的人也不少(對於沒安裝的人來說看到的都是一片空白就是了)。
而 witch 所想的也一樣,隨著 Unicode 環境的普及,同樣一個字有真正文字與造字兩個版本,這樣很糟糕。於是自己卯起來把中國海字集乾脆整個對應出來了。

而中文化聯盟的 KiiAli 與 witch 把這個對應表命名為 Big5-Extension,以中文化聯盟的名義推出。(因為它也包含 Big5-Eten 的假名,所以Unicode補完計画反而變它的子集合了。)

 

雖然我對於製造新的擴充字碼有點排斥,但也覺得有兩種惡搞 Big5 的對應表到處流通更是一種混亂,更重要的是其實我也是中國海字集的忠實用戶,於是討論後的結果,兩個專案決定就此合併。這就是「Unicode補完計画 2.10」的誕生。而自此它正式成為一支 Big5 的變種,也意外出現了「Big5-UAO」這聽起來有點炫(?)的編碼名稱。

為了維持與中國海字集的相容性,與 Unicode 之間的對應關係反而有點複雜。打個比方,「浅」這個字在日文有三條橫筆,在中國只有兩條,但在 Unicode 裡是統合的對象,定義在同一個字碼。但中國海字集裡這是兩個字(中國海字集歷史比 Unicode 早很多啊)。為了盡可能相容於中國海字集的字碼定義,只好把這兩個字都定義到同一個字上,於是會有一些字重複定義的問題。另一方面,Unicode 所沒有的文字(例如中國海字集裡有大量的圖案文字)就只好含淚割捨。於是多少空下來一些碼位散落在各處可以使用。

 

當「不製作擴充編碼」這條道德的薄膜(?)破裂後,穿出的是人無窮的野心。反正已經不用考慮沒安裝的人不相容的問題了,那任何一個缺字都顯得非常礙眼。例如中國海字集中並沒有區分的「戶」「户」「戸」,在 Unicode 區分了,這下子日文的「戸」字複製貼上時就亂碼了。於是就決定找個空間把「户」「戸」塞進去好了,這一來就 2.20、2.30、… 這樣不斷地快速一連串地改版。

在最新的 2.50 版,已經支援了 ShiftJIS 所有漢字、GB2312 所有漢字、甚至當年 HKSCS-2001 在 BMP 範圍內的所有漢字。另外,為了方便複製貼上 2ch 的文章,乾脆把半形假名,以及顏文字常用的數學符號跟半濁點 (゚∀゚) 之類全都加進去了,幾乎把 Big5 的 PUA 範圍全都塞滿到極限了。

所以光看 Big5-UAO 定義表的話,會有「順序定義亂七八糟,拉丁文字、符號跟漢字竟然混排在一起」的錯愕感,真正的原因在於「一切始於中國海字集」。想要支援的文字太多,但又要維持與中國海字集的相容性,只好盡可能找出還能用的所有空碼位,把一堆文字硬塞進去,顧不得表格的體系整齊了。

到這裡,Big5-UAO 的版本發展就結束了。

 

這時,Firefox 開始流行了。

本來,例如 IE 瀏覽器,使用的就是 Windows 的字碼表,如果使用者裝了 Unicode補完計画,那 IE 的對應關係也會是 Big5-UAO。這有好處也有壞處。在 Windows XP 時代,極大多數的網站仍然是 Big5 碼,使用了 Big5 假名。沒有安裝造字檔的話,就看不到這些 Big5 假名。Unicode補完計画使用者能直接看到這些 Big5 假名,這點很方便。但同時在留言、貼文的時候,自己打的文字也會被以 Big5-UAO 字碼貼出去,造成讓這些變種字碼擴散的問題。(沒有安裝Unicode補完計画的人,造字會被轉成 &#xxx; 的 entity ref,所以文字流通性比較好。這也是Unicode補完計画所承受的主要罵名之一)

 

而 Firefox 不管 Windows 的對應表,自己包裝了獨立的 Big5 字碼表。也就是說不管使用者有沒有安裝Unicode補完計画,Firefox 的 Big5 處理行為是一致的。這也是有好處有壞處。好處是變種編碼不會到處擴散,但壞處是也完全無法閱讀這些變種編碼的網頁了。而最該死的是 Firefox 1.5 所包裝的 Big5 表格竟然是台灣那唯一的官方表:Big5-2003。為什麼說它該死呢,因為根本沒人用。官方直到 2003 年才搞出這標準,Windows 之類的軟體根本沒打算支援它。Big5-2003 包含了假名而不包括日文漢字,所以雖然說是不會造成 Big5-UAO 外字的擴散,但仍然會造成Big5假名的擴散,結果還是半斤八兩。

 

這時跳出來的是 pietty 的作者 piaip。 piaip 可說是對 Big5-UAO 帶來巨大影響的一個人。在這個階段其實我已經不太直接經手 Big5-UAO 了,所以主要的工作是 witch 在做的。 piaip 與 witch 合作,向 Mozilla 提出了一個相當有趣的對應表。那就是Unicode補完計画 1.5 也曾玩過的「單向對應」。只是這次方向相反,是讓 Big5 的 Big5-UAO 文字對應到真正的 Unicode 文字,而 Unicode→Big5 的方向採用 Big5-CP950(也就是 Windows 標準)。這樣一來,Big5 網頁上的 Big5-UAO 外字會被當作 Big5-UAO 解讀,讓使用者可以閱讀;而使用者自己留言、發文的文字則被當作 Big5-CP950 轉換成 &#xxx;的 entity ref。看得到外字但不製造它。我想這解決方案真是太棒了,無懈可擊,找不到什麼缺點。這張表後來被正式採用,正式編入 Firefox 2.0 的 Big5 標準。

 

piaip 的功績不只是這個對應表,更重要的則是 pietty。 pietty 是知名 telnet 客戶端程式 putty 的 piaip 版本,這個軟體在軟體層級上支援了 Big5-UAO。也就是說不需要去惡搞 Windows 的 Big5 表格了,只要以 pietty 登入 BBS 的話,自然而然就能看到 Big5-UAO 的文字。在這個時期,Winamp 與 NERO 之類的軟體也都陸陸續續支援 Unicode 架構,除了 BBS 以外,其他軟體還需要使用 Big5-UAO 文字的機會少很多了。藉由 pietty 的出現,使用者可以不用安裝Unicode補完計画,只在 BBS 環境內使用 Big5-UAO 編碼了。完美。

以 pietty 為濫觴,接下來 PCMAN 等各種 BBS 軟體接踵開始支援 Big5-UAO,現在支援 Big5-UAO 可說是 BBS 軟體的共通標準了。事實上,像是 Android 下的 LunaTerm 與 MoPTT,以及 iOS 的 Nally 等等,這些智慧型手機OS下的 BBS 軟體,幾乎也都把支援 Big5-UAO 放在第一要務。

而現在最大(或許該說是唯一)的 BBS「PTT」,它本家的 Web 版網站,也是使用 Big5-UAO 標準把 Big5 轉換成 UTF-8 顯示的。

 

同時Unicode補完計画身為軟體的使命已經消失,官網也關閉不再開放下載了(雖然在軟體王之類的網站還持續被流通),但 Big5-UAO 這套文字編碼持續一直被使用著。

 

最近,聽說 Mozilla 也受不了 Big5 有這麼多變種,想要開始整合一些沒在用的編碼了。而其中 piaip 他們提出的這個單向 Big5-UAO 也是被檢討的對象之一,甚至有極端的意見想要把 Big5 整合到只留下 Big5-HKSCS 一支。實際上我調查了一下,相較於十幾年前,現在幾乎所有網站都 UTF-8 化了,其實在 Web 環境下,真的沒剩下多少 Big5-UAO 資料了。但在 BBS 的世界上,反而幾乎無法脫離 Big5-UAO,就好像是個平行世界狀態。也就是說,如果從 Firefox 拿掉 Big5-UAO,事實上影響可能真的是輕微的。但身為台灣人來說,Big5 的預設竟然搞成 Big5-HKSCS 的話,還是太哀傷了。

 

想到這裡,於是我把我知道的 Big5-UAO 歷史,在這裡全部寫了下來。

其實 Big5-UAO 甚至有被收錄在 Perl、Ruby 等程式語言的標準編碼集裡面,但一直都沒有清楚的中文以外的文獻,所以海外討論編碼的社群,往往不知道 Big5-UAO 的存在,或是知道它但完全搞不清楚這是什麼鬼東西。

所以我以中文、還有我比較熟悉的日文寫下了這些經過,希望讓台灣以外的人士,也能藉此了解一些 Big5-UAO 的來歷與使用情形。(有人願意幫我翻成英文嗎XD)

 

參考資料:

Social Comments

One thought on “Big5-UAO 細說從頭”

Comments are closed.