字集編碼,一個永遠的問題
January 03, 2009 (Saturday) 00:58 CST+0800
作為東亞人,我們都有過電腦上出現亂碼的狀況。這還是要從頭說起。
我們無法不提以下几家公司:IBM和Sun公司,這兩間公司對電腦的發展做出了不可磨滅的貢獻——一家提出了個人電腦(PC)的概念,另外一家提出了網路即是電腦的概念,也正是這兩家公司讓我們在科學技朮如此發達的今天還遇到亂碼這個經典問題。
首先,我們談談電腦出現的初期。那時候電腦可不是給吾等小民用的,那可是給軍方用的。說具體點,是美國軍方。既然都是美國了,當然用的是美語(en-us),這沒什么特別的,我們還在使用着中文(正體或簡體)作為自己的主要語言,換了老美,沒學過第二語言的總無法不設計用戶介面吧——理所當然的就是美語了。美語是什么搆成的?一大堆象徵式,一些英文字母還有几個特殊象徵式(外來語,所有格),數一數才不到一百個。電腦內使用二位元表示資料,而2︿7=128正好夠用,那就用7位二位元位表示字元好了,又沒有什么新的字元,夠了。后來,電腦的效能越來越好,價格也越來越低,換句話說,電腦普及了。
電腦普及了當然很好,每個人都有可能去使用它了,初期的設計失誤也顯現出來了:東亞語言沒有被支援。很自然地,東亞的電腦用戶開始探索怎樣使電腦察看中文 。大陸,有了CCDOS(第四機械工業部第六研究所嚴援朝,后來的四通利方:這是一段很曲折的曆史,又涉及到了互聯網泡沫,是在我剛上網的時候的事情了,后來的新浪,中文之星,四通利方打字機,瀛海威……),以后出現了UCDOS(香港金山公司求伯君,用組合語言寫了UCDOS和WPS,香港金山就是現在金山的前身),到現在,多數使用的是TW漢字系統(北京市怡江新技朮實業發展公司陳江寧,用MASM和Borland C++,也有一段時間沒有出現過了)。台灣,最出名的則是倚天漢字系統(它的影響到現在還在持續,開啟你的正體中文匯入法,鍵槃一定有倚天鍵槃佈局的),還有龍碟系統也是不錯的。這些東西表示漢字必然要有一個編碼系統,這就是我們討論的東西:Character Encoding。
下面一部分討論中國大陸地區
說起來可笑,不知道哪位神仙以為中文就六千來個字,部分人名用字(如中國前總理朱镕基的“镕”字),台灣及香港使用的繁體字,日語及朝鮮語漢字等,并未有收錄在內。微軟為了某些目的(鬼知道什么目的)GuoBiao2312被延伸成了GuoBiaoKuozhan。。。1993年已經有了Unicode標准萬國碼1.1,已經收錄了CJK字元20902個,可笑的有關部門想不開,非得繼續死守GB2312,知道現在某些曆史遺留問題還沒有得到解決,并且看起來不像能得到解決:大家都知道銀行系統背景是UNIX的(用Windows純屬找死),資料程式庫為了能儲存某些人的生僻字名字,只能用Unicode,但是在終端機機上,由于使用的都是DOS系統,沒有什么支援Unicode,也只能匯入GB2312字程式庫的文字,導致了大量人到銀行開戶不成功,某知名大學(國際上不入流)開發的教務系統(就是那個不評課下學期無法選課查成績的)使用了GB2312和Unicode混合開發型態導致很多同學的名字察看為框框和問號。青島市某知名新聞網站也因為編碼問題導致了在標准瀏覽器下的亂碼現象。雖然GBK收錄了不少漢字,但它終究是個過渡方案,很快中華人民共和國國家品質,朮監督局于2000年3月17日推出了GB 18030-2000標准,這是一個不錯的標准——可以1,2,4位元編碼一個漢字,比對靈活。
下面一部分討論其他中文區域
中文是種表意文字,字從絕對數量上來說是相當大的,以至于現在的Unicode標准中大部分是給CJK區准備的。作為正體中文使用區域,異體字相當多,如果像GB2312那樣,只有六千多個漢字,是無法完整表示意義的。BIG5共收錄13060個漢字,是在1984年由中華民國財團法人資訊工業策進會為五大中文套裝軟體(巨集碁、神通、佳佳、零壹、大眾)所設計的中文內碼,所以就稱為BIG5中文內碼,雖然五大套裝軟體並沒有成功,但BIG5碼卻深遠地影響正體中文電腦內碼,直至今日。「五大碼」的英文名稱「BIG5」後來被人按英文字序譯回中文,以致現在有「五大碼」和「大五碼」兩個中文名稱。BIG5是根據中華民國教育部頒布的《常用國字標準字體表》、《次常用國字標準字體表》等用字匯編而成,並沒有考慮社會上流通的人名、地名用字、方言用字、化學及生物科等用字,亦沒有擺入日語平假名及片假名字母,因此市面上的軟體大多支援BIG5的增補集。BIG5不是官方標準,中推會決定編製一個Big5的定義,並把它放到官方編碼CNS 11643的附錄裡,正式成為官方標準的一部分。由于Big5各廠商定義不一致,導致現在Big5缺字現象十分嚴重。
解決方案——對于所有中文地區
其實這個方案早在1993年就已經出台——萬國碼Unicode。Unicode包含了超過十萬個字元(在2005年, Unicode 的第十萬個字元被釆納且認可成為標准之一)、一組可用以作為視覺參照的程式碼圖表、一套編碼方法與一組標准字元編碼、一套包含了上標字、下標字等字元特徴的列舉等。它在電腦系統的國際化中起到了十分重要的作用,并且在最近一段時間內的新技朮中廣泛應用,比如Java,可延伸標示語言XML,也包括最新版本的作業系統。
但是,我們現在看到的情況依然是亂碼和框框同在。為什么呢?這又扯到了另外一個問題上:標准化。中國人曆來是愛變通的,但這一變通不要緊,好多事情都壞事了。我們到現在真的沒有看得出來微軟的網際網路探索者瀏覽器有什么好的,它支援的CSS和HTML的不標准是大家都看到的,但是大陸網站都愛用這種不標准的型態寫網頁!大陸知名的門戶網站沒有几個能完全支援所有瀏覽器的,而某知名即時通訊軟體的網站甚至設定障礙讓其他瀏覽器用戶閱讀其部落格系統。大陸流行的各種整站系統支援標准瀏覽器更是差得要命,更有甚者直接全部使用怪異型態編寫,儘量阻止使用標准瀏覽器的用戶。這是一個方面,另外一個方面,緊握GB2312不放。顯然大家都在知道這有麻煩,在非簡體中文系統下極容易產生亂碼現象,況且缺字現象比大五碼嚴重好多。這是個道德水平問題,我們今天暫不討論。
寫這篇文章其實是只是為了發發牢騷,最近已經被字集編碼搞瘋了,亂碼和亂碼一直蕩漾在我的大腦裡。這份東西是我在Linux系統下使用注音匯入法打進來的,倉頡我不會用,相當辛苦的工作,但是我還是選取不用簡體中文,因為——字集編碼!


and Solaris 11.