早在1984年時,由台北市電腦公會主導,並聯合十多家電腦業者共同制定最初的Big5碼。當初制定的目的是為了因應電腦相關業者對「中文數位化」日益迫切的需求,有了統一的中文編碼標準,則中文數位資料才能在各平台間交換,各廠商也才能更進一步地開發相關的中文處理軟體。雖然在此之前,曾有一批文字學家、圖書館學家、以及電腦學者等所組成的「國字整理小組」,進行國字整理與編碼工作,並制定了目前通行於圖書館界的 CCCII 碼,然而可惜的是此套編碼不被當時的政府單位採納,因而無法在電腦業界推廣。是故他們才有另起爐灶,制定 Big5 碼之舉。而我們為了便於區分起見,便稱這個最初的 Big5碼版本為: BIG5_1984。
編輯Big5碼的起因
根據Big5碼的編碼規則,其所能容納的中文字與符號,最多也只有將近兩萬個,但中文字的個數實際上遠遠超過這個數目,要全部囊括進來是不可能的。因此在制定之初便保留了適當的彈性,也就是在此編碼範圍中只收錄了一般常用字與次常用字,並保留了相當的碼點空間讓使用者造字,藉此彌補缺字的問題。
然而,當初的美意卻造成了往後的問題。由於保留了廣大的造字空間於此編碼中,再加上政府單位向來不硬性規定中文編碼的態度,於是各廠商紛紛在這些造字區中加料,因此Big5碼版本紛岐的問題就來了。
《圖一 在Netscape下設定Big5中文繁體碼》 | 資料來源:http://netscape17.tripod.com/first_coding.htm |
|
不同的版本間的困擾
在這諸多 Big5 的「變種」版本中,最重要的兩個莫過於來自「倚天中文系統」的「倚天外字集」(一般人稱為BIG5_Eten),以及來自微軟視窗系統的CP950字集。它們之所以重要,主要是因為使用者眾多,且流傳極廣。雖然在BIG5_1984已有部分漢字與符號定義的碼點相同,但在BIG5_1984的造字區卻有若干不同;不幸的是這些出現在造字區的新符號已有不少使用者在使用,因此當他們在換用不同的中文系統時,就不時地出現許多文字符號不能用的困擾了。
這樣的問題到了自由軟體世界開始邁向中文化時更加嚴重。因為絕大部分自由軟體的開發,是集世界各地的程式開發者一起加入研究,大家所考慮的是「程式國際化與資料本土化」的程式設計架構,也就是一套程式設計出來後,能同時處理多國語文,而處理各國語文的部分與程式本身分開,自成一個資料庫,如此寫程式時就不需要各寫一個版本給每一種語文了。
這是一個很好的架構,但當這些開發者開始實作我們的Big5碼部分時卻遇上了麻煩,因為他們找不到一個有公信力的標準可以參考,同時也不了解我們這邊的情況。他們唯一能夠找到的參考對象是一份來自Unicode Consortium的Big5與Unicode之間的轉碼表,但偏偏這份轉碼表的內容,不明究理地與 BIG5_1984、BIG5_Eten和CP950
間又有些許差異,其中又少了很多BIG5_Eten裡廣為使用的倚天外字。因此,這也就造成了在自由軟體世界剛邁入中文化的頭一兩年裡,最讓大家感到困擾的地方了。
香港與台灣Big5碼的差異
爾後,Big5 碼所出現的變種,已不單只是將原來的BIG5_1984的造字區拿來放入若干符號而已,事實上它們更是大幅收錄新字,填入造字區中空出來的碼點上;所以嚴格來說,這些字已是「新」的字集了。在這之中,最重要的莫過於「BIG5 香港增補字符集」(Hong Kong Supplementary Character Set–BIG5-HKSCS)了。這是由香港政府所制定的字符集,而且也已成為香港地區通行的標準。而在我們這邊,中推會也曾制定了一份「BIG5 補充碼字集」(BIG-5 Extension Character Set–BIG-5E),當初制定的動機是提供一份現成的常用造字字集,讓使用者可以免除大量造字的麻煩,同時也方便使用新字的文件在各平台間交換。然而,它並沒有成功地推廣開來。
正因為Big5有這麼多彼此分岐的版本,不論在實作上或使用上都給大家帶來許多不便,因此在我們的中文環境要邁向國際化之際,就必須開始嚴肅看待這個問題了。這些種種的問題,終於在2002年8月3日,在中研院資科所舉辦的Li18nux台灣特別會議中被提出來討論。與會者均同意,由於Big5碼的編碼空間有限,再怎麼樣也難以收錄所有中文字,且版本不一,所以缺字的問題很常見。最直接的解決之道就是換用大字碼(如CNS11643或Unicode ),但那可能需要相當的社會成本,且也不是一天兩天可以辦得到的事。
不過目前有太多的電腦文件資料是使用Big5碼,所以邁向大字碼將會是一個漸進的工作,這也意味著我們可能還有好一段時間需要依賴Big5碼。既然如此,研究人員就應該要給它確立好一個標準,並且在自由軟體世界中有完善的實作,讓大家不再發生困擾。
《圖二 在Netscape的語言選項裡設定Big5香港中文碼》 | 資料來源:http://netscape17.tripod.com/first_coding.htm |
|
Li18nux組織
在上一屆的Li18nux會議中,研究人員做出了一些相關的結論,即在Li18nux組織(現已改稱為OpenI18N)中成立一個Li18nux-big的工作小組(同
樣改稱為OpenI18N-big5),並進行初期的 Big5 碼標準化的規畫工作。
研究人員的工作重點
1. 重新檢視Big5碼,並確立與Unicode間的對應。當時的研究人員主要是拿最廣為使用的BIG5_Eten與CP950作為範本,取其聯集,同時參考BIG5_HKSCS與 Unicode的對應表,以盡量做到最大的相容性。這主要的工作是由唐宗漢先生(Autrijus Tang)與霍東靈先生(Anthony Fok)完成,而研究人員將其定名為TW-BIG5編碼,以符合OpenI18N對字集編碼名稱的規範。
2. 推動Big5碼國家標準化,並期望政府相關單位能夠正視,以及參與維護Big5碼的工作。這部分主要是由葉平教授(Ping Yeh)進行。在葉平教授積極奔走及行政院主計處與軟體自由協會的協助之下,目前正一步步地往前推進。在歷經幾次會議之後,目前總算有了一份「BIG5-2003」的草案。
各式各樣的Big5碼
由於中文字的數量動輒上萬,因此在電腦中不能像西方國家一樣,單單只用一個位元組(byte)來容納。所以在 Big5 的編碼中,必須以兩個位元組來代表一個中文字或符號,傳統上在螢幕顯示時其寬度是兩個英文字(ASCII 碼)的寬度,故在許多中文系統中,我們習慣將這些中文符號稱為「全形字」,而相對的ASCII字則稱為「半形字」。儘管我們用兩個位元組來組成全形字,但為了能與ASCII碼相容,研究人員不能將這兩個位元組的所有可能值都納入編碼範圍。
TW-BIG5碼點與Unicode之間的對應關係
為了達到最大的相容性,所以研究人員在制定TW-BIG5草稿時,便取各種Big5碼版本的聯集。不過光是這樣還不夠,還有一項重要的工作是確立各TW-BIG5碼點與Unicode之間的對應關係。因為在自由軟體世界(在此指的是GNU/Linux系統)的「程式國際化與資料本土化」的程式架構下,各國語文資料在系統底層都必須以Unicode或UCS4的編碼來表示,如此才能達到編碼轉換與資料交換的目的。因此研究人員不僅要將TW-BIG5中有定義的碼點與Unicode對應起來,還要考慮到空的碼點,也就是造字區的部分與Unicode的對應,這樣有使用者在過去的造字,才能在TW-BIG5下使用。
由於這些造字區的碼點沒有真正定義出中文字或符號,因此在與Unicode對應時,必須對應到其PUA的區域;而這個區域是私人使用的碼點區,也沒有明確的文字或符號定義,同時在Unicode的規範中,使用PUA區的碼點資料是不能用來交換。道理很簡單,正如同某甲所造的新字不見得能在某乙的電腦中同一個碼點位置上找到。
Big5碼國家標準化工作推手之一的國內自由軟體社群,在理論上提出BIG5-2003草案時,就應當考慮到官方研究人員的意見,也就是 TW-BIG5 的內容。然而,由於之前聯繫上的失誤,使得官方研究人員的TW-BIG5沒有即時被納入考慮,因此事後的比對工作就相形顯得重要了。經過比對之後,研究人員發現BIG5-2003與TW-BIG5之間還是有些差異,這些差異總結如下:
- 1. BIG5-2003沒有考慮到使用者造字區與Unicode PUA之間的對應。
- 2. BIG5-2003在「罕用符號區」中,將BIG5_Eten與TW-BIG5內含的俄文字與輸入法特殊符號都刪除了,僅保留了數字符號以及日文字。
這麼做的理由有可能是因為BIG5-2003的定位是要做為CNS11643的附錄,這也意味著每個BIG5-2003上有定義的碼點都要與CNS11643有一對一對應才行。然而這些罕用符號區中的俄文字與輸入法特殊符號在 CNS11643 都找不到對應,因此自然不能包含進來。另外一點就是這些沒有包含進來的符號,幾乎沒有人在使用。
研究人員未來的相關工作
嚴格來說,解決BIG5-2003與TW-BIG5之間的差異並將BIG5-2003推向國家標準化,仍只是第一步而已。如果讀者再仔細看看Big5碼的內容,就會發現其中仍有些許不完善的地方是仍需進一步的工作。
與Unicode之間的多對一的對應問題
這裡指的是多個Big5碼點對應到同一個Unicode的碼點,會發生這樣的狀況,主要是因為Big5中有些碼點所代表符號的形狀非常相似,而在Unicode中,這些看起來形似的符號,也只能夠提供單一碼點做為對應;其實這是Big5先天上的問題,而造成某些Big5多對一的碼點在轉成Unicode之後再轉回Big5時就不見了。因為轉回來時,是轉到另一個也同樣對應到該Unicode碼點Big5碼點去了;這就等於某些資訊可能在這樣的轉換中流失,故原則上研究人員希望這種「多對一」的發生情況可以越少越好。
異體字的問題
研究人員曾發現,某些中文字在BIG5與CNS11643中,與教育部所頒佈的標準楷書形狀不一樣。理論上,應以教育部所頒佈的中文字的形狀為標準,然而由於CNS11643已是國家標準,同時其標準也早已提報到許多國際組織中,要修改並不容易。不過異體字的問題直接關係到我們對下一代的教育,因此筆者認為我們有必要正視此一問題,並設法化解決二者間的岐異。
總結
目前的Big5還有很大的造字空間,必要的話可以繼續收錄新字。但有沒有必要這麼做呢?從實用的觀點出發,這麼做是必要的,因為隨著時代的演進,原本的罕用字可能漸漸變成常用字,使用者到最後免不了要面臨缺字的問題。然而,繼續收錄新字讓Big5成長,也意味著原本的造字區將逐步縮水,原來慣用造字區的使用者將無法再使用它。另外,若要最直接地解決缺字問題,便是換用大字碼。當中文字正一步步朝向大字碼邁進之際,是否還值得持續擴充Big5?這一點值得大家深思討論。
<作者為Xcin計畫主持人:thhsieh@linux.org.tw>
(本文與自由軟體鑄造場計畫網站同步刊登)
|
|
本文對CNS11643國家中文標準交換碼、BIG-5E碼、EUC碼、CCCII碼、ISO10646及UNICODE漢字集碼等中文碼有詳細的介紹。此外,還有中文碼之應用及發展的深入剖析,相關介紹請見「全字庫中文碼介紹」一文。 |
|
鑑於市民及政府部門不時需要把新字符納入<香港增補字符集>內,政府在與中文界面諮詢委員會(中諮會)共同努力下,於二零零零年四月公布了<香港增補字符集>字符增收程序和原則。本篇文章除了對<香港增補字符集>有詳細的介紹外,另有更新的字庫供一般民眾下載,你可在「<香港增補字符集>增收新字符的工作」一文中得到進一步的介紹。 |
|
我國最早之中文字碼為民國六十九年提出之「中文資訊交換碼」(Chinese
Character Code for Information Interchange,CCCII)。訂定此碼的原動力是美國急需使用電腦處理東亞語文資料,因此派遣負責人赴東亞考察。當時只有日本訂定資訊碼標準JIS
C 6226
,美方初步決定採用此標準。我華裔美國亞東圖書館代表與我國代表極力反對,說明日本漢字無法代表中國文字的理由,並允諾四個月之後提出我方之標準。本文對國內中文字碼發展始有詳細的記載,在「國內中文字碼之發展」一文為你做了相關的評析。 |
|
|
|