背景资料
========
目前,大部份不同語文的電腦系統,都有不同的編碼標準。如中文的系統就有BIG5和GB2312/GBK。各種文字有不同的文字編碼,不同系統在文字碼中轉換,會出現很多問題,最明顯是由於系統不能正確解析,造成所謂『亂碼』的現象。
因此,世界上主要的電腦廠商均推動利用Unicode(統一碼),將世界上幾十種文字編碼整合一起為一種編碼,結果可以讓多種文字在同一文件中容易地顯示,也毋須作編碼轉換。Unicode是由美國各大電腦廠商組成的Unicode策進會推動。理論上,這種編碼可以將世界上常用的文字都涵蓋進去,減少電腦商開發國外市場的問題。
香港主要利用的傳統繁體中文電腦系統,都是利用大五碼(BIG5)作為編碼,繁體版的Windows 3.1/9x都是利用BIG5作為系統的編碼,BIG5故此也被稱為Windows ANSI code page for Traditional Chinese(也就是CP 950),而BIG5編碼利用十六進元位,利用兩個bytes代表一個中文字。
BIG5編碼是在台灣開發,故此許多香港的常用字都不包含在內。BIG5編碼之內,如何涵蓋特殊字,一直引起不少混亂。電腦用戶如果要在電腦上使用這些所謂特殊的字符,唯有在使用者造字區(User Defined Area, UDA)為這些字符編配內碼。用戶自行造字對獨立運作的電腦不會構成問題,所以一旦涉及資料交換,用戶定義造字就不能在另一方正確顯示,就會引起溝通的問題。
為了打破香港常用字在文字編碼的溝通限制,香港政府與許多業界人士,為香港常用而又不在Big5內的單字,製作了約五千個字的編碼,簡稱為香港增補字符集(Hong Kong Supplementary Character Set, HKSCS)。
在香港增補字符集出現之前,香港政府亦公佈過一套稱為政府通用字庫Government Chinese Character Set (GCCS) (或稱香港政府指定3049外字集),共收錄了3,049個常用字,這些字利用BIG5編碼的使用者造字字集End User Defined Character(EUDC)內,而字集的套裝包括EUDC字體和EUDC的輸入法。
而新的香港增補字符集(HKSCS),更包括了Big5和ISO 10646的編碼。故此,HKSCS的Big5版,實際上就是補充了GCCS的增強版。
這些在EUDC的Big5使用者造字字集,按照一般Unicode的規定,都已對應在Unicode的私人使用區Private Use Area(PUA)內。而Microsoft的NT也是如此。原則上,私人使用區是供廠商和用戶自行定義字符的字區,這個區域是供個人和廠商作私人用途,不作資料交換用途。
何以會有上述的私人使用區Private Use Area(PUA)在Unicode的編碼內存在?
以上提及,Unicode要將成千上萬的文字收進同一個共通的編碼內,在兼顧經濟的原則下,不管東方或西方文字,每個字在Unicode的Basic Multilingual Plane (BMP)中都可一律以兩個Bytes(即16 Bits)進行編碼來代表。以簡單的運算,就至少能有2 16 = 65536種不同組合,足以應付大多數文字編碼的需要。
Unicode的技術文件,大家可以經常看到ISO 10646這個名詞。如上述HKSCS就具備一套ISO 10646的編碼。ISO是總部設於瑞士的國際標準局的縮寫。ISO頒布的第10646號標準名為UCS(Universal Character Set),也就是世界通用字集。ISO是由世界各地的政府代表商定國際標準的官方組織,就Unicode由電腦業界組成的性質不同。
但是,Unicode策進會和ISO的UCS一直緊密合作,讓Unicode和ISO 10646保持一致。因此,Unicode和ISO 10646使用完全相同的字庫。
可是,由於漢字以方塊字構成,所佔的分配空間非常驚人。Unicode只有六萬多字的分配空間,實在不敷應用。故此Unicode和UCS都採用了『中日韓文整合』(CJK Unification),把中、日、韓的漢字,以同一字碼來代表,以節省寶貴的定址空間。
CJK Unification內的漢字,在Unicode中稱為Unihan(統漢字)。但是,統漢字仍不能包含所有不常用的漢字,其中也包括部份香港增補字符集(HKSCS)或者香港政府指定3049外字集(GCCS)之內的部份字符。
可是,事實上,不少在香港增補字符集(HKSCS)或者政府通用字庫(或稱香港政府指定3049外字集)(GCCS)內的字符,目前已經在Unicode內提供了編碼。故此,當香港增補字符集的BIG5內的使用者造字字集End User Defined Character(EUDC),安裝到Windows NT系統上,利用正常的EUDC/PUA對應,每一個字符就會有兩個碼位(Code points),代表該字符的編碼。其中一個在CJK區的Unicode碼位,另一個在PUA區。
假設一份含GCCS的Big5編碼文件,轉換成Unicode編碼文件,GCCS的字符就會保留在PUA區,而CJK區代表該字的字形就沒有使用。反之如果文件從Unicode轉成Big5,CJK區代表該GCCS字符的碼位,亦會因對應到Big5的EUDC區而失掉,再轉換成Unicode時不能找到位於CJK區的碼位。
政府通用字庫(GCCS)的定義
==========
顧名思義,政府通用字庫包括了3,049個字符。上述字符和Unicode的關係如下:
已跟Unicode合併的字符 1,621個
已經Extension-A合併的字符 311個
須用新字符表達 1,117個
GCCS總數 3,049個
香港增補字符集的定義
==========
香港增補字符集(HKSCS)可以被視為政府通用字庫的第二版。其中包括了政府通用字庫的原用字符(其中119個字符已因與現存的Big5碼合併而取消)。換言之,香港增補字符集包括原來的政府通用字,再加上新增的字符。
在二零零五年五月,香港特區政府公布香港增補字符集-2004 (HKSCS-2004),除再加上新增的字符外, HKSCS-2004在技術上配合國際標準化組織在二零零四年四月公布的「ISO/IEC 10646:2003」和其修訂本。換言之,HKSCS-2004已再沒有利用Unicode 的私人使用區(PUA)。以下本文只集中解釋舊版香港增補字符集和Unicode私人使用區(PUA)的使用問題及其解決方案。
Unicode和香港增補字符集的關係如下:
Microsoft 對應Unicode及香港增補字符集解決方案的一般原則:
内容摘自一份文档, 朋友所传, 不知出处.
希望网友补充.