香港增补字符集(HKSCS) 背景介绍

背景资料

========

目前,大部份不同語文的電腦系統,都有不同的編碼標準。如中文的系統就有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及香港增補字符集解決方案的一般原則:

  1. 方案將集中於儘量利用現時的Unicode,來表達香港增補字符集內的字符。作業系統內會加進新的字體和編碼轉換對應表,為政府通用字庫提供反向兼容。不過,要將舊的政府通用字庫轉換成新的香港增補字符集,則要應用程式負責。以往的政府通用字庫完全利用Unicode 的私人使用區(PUA),而新的香港增補字符集則會利用所有的已定義Unicode字符(包括位於CJK區和擴充A區)
  2. 新的編碼轉換對應表的內容包括了以往cp 950和加上香港增補字符集在Big5的使用者造字區(EUA)所定義的碼位(Code Point)。
  3. 為了向香港的Big5用戶和舊的Big5應用程式提供反向兼容,Big5/950支援將會轉為利用新的編碼轉換對應表。

内容摘自一份文档, 朋友所传, 不知出处.

希望网友补充.

HKSCS的更多相关文章

  1. Python中文乱码

    1,注意:请使用智慧型浏览器 "CHROME" 配合理解和运作本文中提到的程序. 2,提示:谷歌的CHROME浏览器是迄今为止最智慧的浏览器,没有之一,只有第一. 3,谷歌的CHR ...

  2. Base64编码原理与应用

    本文内容转自网络,如需详细内容,请参考相关网址. http://my.oschina.net/goal/blog/201032 代码参考:http://blog.csdn.net/prsniper/a ...

  3. BOM的来源是不可能出现的字符,GB2312双字节高位都是1,Unicode理论的根本缺陷导致UTF8的诞生

    Unicode字符编码规范   http://www.aoxiang.org 2006-4-2 10:48:02Unicode是一种字符编码规范 . 先从ASCII说起.ASCII是用来表示英文字符的 ...

  4. Ansi,UTF8,Unicode,ASCII编码的差别

    近日须要不同的编码,关于上述编码,一直迷迷糊糊,查了些资料,总算大致了解了,以下全是从网上搜来的: 1.  ASCII和Ansi编码    字符内码(charcter code)指的是用来代表字符的内 ...

  5. Globalization Guide for Oracle Applications Release 12

    Section 1: Overview Section 2: Installing Section 3: Configuring Section 4: Maintaining Section 5: U ...

  6. Informatica_(6)性能调优

    六.实战汇总31.powercenter 字符集 了解源或者目标数据库的字符集,并在Powercenter服务器上设置相关的环境变量或者完成相关的设置,不同的数据库有不同的设置方法: 多数字符集的问题 ...

  7. 转:从头开始编写基于隐含马尔可夫模型HMM的中文分词器

    http://blog.csdn.net/guixunlong/article/details/8925990 从头开始编写基于隐含马尔可夫模型HMM的中文分词器之一 - 资源篇 首先感谢52nlp的 ...

  8. python 编码方式大全 fr = open(filename_r,encoding='cp852')

    7.8.3. Standard Encodings Python comes with a number of codecs built-in, either implemented as C fun ...

  9. Ansi,UTF8,Unicode,ASCII编码的区别 ---我看完了 明白了很多

    来自:http://blog.csdn.net/xiongxiao/article/details/3741731 ------------------------------------------ ...

随机推荐

  1. pythondifflib模块讲解示例

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Lockey23/article/details/77913855 difflib模块提供的类和方法用 ...

  2. 【LoadRunner】LR编写Dubbo协议脚本

    一.Dubbo服务简介 Dubbo是一个分布式服务架构,把核心业务抽取出来作为独立的服务,使前端应用能更快速和稳定的响应. Dubbo服务工作原理:服务提供方提供接口,并提供接口的实现,提供方注册服务 ...

  3. 关于ADB push 出现failed to copy 'D:\file.xtxt' to '/system/temp/' : Read-only file system 的报错信息解决办法

    首先使用USB连接电脑与小机,然后安装adb相应的驱动,这是第一步,也是必须要做的. 进入doc系统后,敲入adb shell  可以进入linux命令行状态,说明adb可以使用了. 回到标题,我们现 ...

  4. Python 3基础教程14-在文件尾部更新内容

    本文介绍在一个已经存在的文件尾部添加内容,还是用到write方法. 这里exampleFile.txt是前面文件创建的文件,里面有两行文字.

  5. python 学习分享-paramiko模块

    paramiko模块学习分享 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.paramiko支持Linux, Solaris, BS ...

  6. 3D U-Net卷积神经网络

    3D U-Net这篇论文的诞生主要是为了处理一些块状图(volumetric images),基本的原理跟U-Net其实并无大差,因为3D U-Net就是用3D卷积操作替换了2D的,不过在这篇博文中我 ...

  7. idea中maven项目放到包中的mapper的xml文件不发布的问题

    今天重新一下mybatis的基础,然后一直报错,提示的是 result map 找不到com.zm.model.User对象可是看 mapper的写法没问题.找了半天才发现 是mapper没扫描到 解 ...

  8. ocrosoft Contest1316 - 信奥编程之路~~~~~第三关问题 D: 手机话费

    http://acm.ocrosoft.com/problem.php?cid=1316&pid=3 题目描述 小明的手机每天消费1元,每消费K元就可以获赠1元,一开始小明有M元,问最多可以用 ...

  9. PHP文件开头session_start()

    session_start(); 告诉服务器使用session.一般来说,php是不会主动使用session的. 不过可以设置php.ini中的session.auto_start=1来自动对每个请求 ...

  10. 异常:Batch update returned unexpected row count from update [0]; actual row count: 0;

    使用了hibernate的主键生成策略,而在程序中又主动去设置了主键值.<class name="ProductRegion" table="PRODUCT_REG ...