- 中国和欧美床上用品的标准尺寸对比 [2013/07]
- 猪肉各部位的食用方法 [2010/05]
- 加拿大人的收入税比对表 [2014/02]
- 胸口疼的原因分析与处理意见 [2014/11]
- 什么原因会导致心跳加快? [2013/05]
- 北美常见水产品中英文对照及吃法(网络更正版) [2009/08]
- 加拿大海洋三省自驾游全攻略 [2011/08]
- 北美市场9种品牌的“骨胶原”对比 [2014/04]
- 鲫鱼、鲗鱼、鲷鱼的区别 [2010/05]
- TB皮试阳性的判断及处理 [2011/11]
- 如何看懂英文的验血化验单? [2020/08]
- 洋葱的青苗能当葱吃吗? [2011/07]
- 海外华人回中国,用什么证件最好? [2013/11]
- 网络情缘的4大障碍 [2010/03]
- 中国人说英语为什么听起来没有礼貌? [2010/12]
- 为什么很多人对基督教比较反感? [2010/10]
- 世界各地的粽子集锦 [2019/06]
- 为什么海外华人回国要装穷? [2010/09]
- 对“异议”与“民运”人士的心理剖析 [2011/01]
- 国籍与爱国 [2009/06]
- 贝壳村“中秋圆月摄影有奖大赛” [2009/09]
- 贝壳村发展史 [2010/09]
- 我的人生历程:0岁 - 40岁 (图片集) [2009/03]
- 贝壳村村旗(草案) [2011/01]
- 2012贝壳村“多伦多夏令营”活动报道 [2012/07]
- 贝壳村集体大合影(和谐版) [2010/06]
- 今天我请客 [2010/08]
- 祝妈妈咪生日快乐! [2010/03]
- 2080年贝壳村村民上海大聚会 [2012/05]
中日韩统一汉字,标识为Unicode,也叫中日韩统一表意文字,英语:CJK Unified Ideographs(CJK就是中日韩的英文首字母),也称统汉字(Unihan)。1990年代初,ISO 10646制订时,来自台湾的代表提出相同形式的中日韩汉字给以统一编码(Unify,ISO术语称为认同),可以大量节省编码空间,获其他代表接纳。
中日韩统一表意文字,目的是要把分别来自中文、日文、韩文、越文中,本质相同、形状一样或稍异的表意文字(主要为汉字,但也有仿汉字如方块壮字、日本国字、韩国独有汉字、越南的喃字)于ISO 10646及Unicode标准内赋予相同编码。越南文后来加入此计划,所以亦有 CJKV(中日韩越统一表意文字)的称呼。Unicode亦开始收录越汉字--喃字。有关Unihan Code Charts的信息,见网页:
http://www.unicode.org/
http://www.unicode.org/charts/unihan.html。
其中,ISO 10646 版本1993,相当于Unicode 版本1.0,收录汉字20,914个;ISO 10646 版本2003第八修订版,相当于Unicode 版本5.2,收录汉字74,525个。
最初期的统一汉字(20,902字)字源来自以下字集:中国大陆的G源、台湾的T源、日本的J源以及韩国的K源。此外,还有扩展A区,包含有6,582个新的汉字,位置在 U+3400-U+4DB5;扩展B区,包含有42,711个新的汉字,位置在 U+20000-U+2A6D6。另外,在 U+2F800-U+2FA1D 的位置,放了542个来自台湾的兼容汉字;扩展C区,收录4,149个汉字,包括来自中国大陆、澳门、台湾、日本、越南等尚未被编码的汉字。位置在 U+2A700-U+2B734;扩展D区,编码范围为 U+2B740-U+2B81E,编码223个汉字;扩展E区,即之前的扩展D区计划收录的汉字,因为急用汉字(UNC)被放置在扩展D区,所以之前计划的扩展D区改为扩展E区。
已统一的汉字,原则上ISO 10646只对字(Character),而非字形(Glyph)编码。同一字各地可使用自己的标准写法。使用HTML标示同一编码的字在不同地区中的写法(但只是读者电脑提供的字型,未必代表该地区的标准写法)。没有统一的汉字,有些字只是同一字在不同地区的写法,理应统一,但因为字源分离原则而只好分开编码。值得注意的是字源分离原则由“Unicode联盟决定把不正统的编入位于基本多文种平面的 ‘相容表意文字区’(Compatibility Ideographs)”时起废弃,原因是CNS中有太多字形非常接近,按 Unicode 标准应该统一的字。这些字只有正统的会编入正式字集(包括扩展A、B、C区)中,不正统的编入位于“第二辅助平面”的“相容表意文字补充区”(Compatibility Ideographs Supplement)中。
为什么要使用Unicode文字编码呢?
Windows系统的电脑中,所有文件的汉字都是采用8、16、32等进制数据进行编码的(汉字无疑是世界上最复杂的文字)。当汉字显示出来时(暂且不考虑如何输入的),Windows首先将文本数据转换到它内部使用的编码格式:Unicode,然后按照文本的Unicode去字体文件中查找字体图像,最后将图像显示到窗口上。所谓编码,就是用数字表示字符,例如用D7D6表示“字”。当然,编码还意味着约定,即大家都认可。
在Unicode被广泛使用前,有多少种语言、文字,就可能有多少种文字编码方案。一种文字也可能有多种编码方案。我们可以看到记事本支持4种编码格式:ANSI、Unicode、Unicode big endian、UTF-8。Unicode、Unicode big endian、UTF-8,其实它们更准确的名称应该是UTF-16LE(Little Endian)、UTF-16BE(Big Endian)和UTF-8,它们是基于Unicode的不同编码方案。
这里要涉及代码页(Code Page)这个古老的专业术语,据说是IBM公司首先使用的。代码页和字符集的含义基本相同,代码页规定了适用于特定地区的字符集合,和这些字符的编码。可以将代码页理解为字符和字节数据的映射表。Windows为自己支持的代码页都编了一个号码。例如代码页936就是简体中文 GBK,代码页950就是繁体中文 Big5。代码页的概念比较简单,就是一个字符编码方案。但要说清楚Windows的ANSI代码页,就要从Windows的区域(Locale)说起了。
微软为了适应世界上不同地区用户的文化背景和生活习惯,在Windows中设计了区域(Locale)设置的功能。Local是指特定于某个国家或地区的一组设定,包括代码页,数字、货币、时间和日期的格式等。在Windows内部,其实有两个Locale设置:系统 Locale和用户Locale。系统Locale决定代码页,用户Locale决定数字、货币、时间和日期的格式。我们可以在控制面板的“区域和语言选项”中设置系统Locale和用户Locale:每个Locale都有一个对应的代码页。系统Locale对应的代码页被作为Windows的默认代码页。在没有文本编码信息时,Windows按照默认代码页的编码方案解释文本数据。这个默认代码页通常被称作ANSI代码页(ACP)。
在Windows 2000以后,Windows统一采用UTF-16作为内部字符编码。现在,安装一个代码页就是安装一张代码页转换表。通过代码页转换表,Windows 既可以将代码页的编码转换到UTF-16,也可以将UTF-16转换到代码页的编码。代码页转换表的具体实现可以是一个以nls为后缀的数据文件,也可以是一个提供转换函数的动态链接库。有的代码页是不需要安装的。例如:Windows将UTF-7和UTF-8分别作为代码页65000和代码页 65001。UTF-7、UTF-8和UTF-16都是基于Unicode的编码方案。它们之间可以通过简单的算法直接转换,不需要安装代码页转换表。
在安装过一个代码页后,Windows就知道怎样将该代码页的文本转换到Unicode文本,也知道怎样将Unicode文本转换成该代码页的文本。其实,如果全世界人民在计算机刚发明时就统一采用Unicode作为字符编码,那么代码页就没有存在的必要了。可惜在 Unicode被发明前,世界各国人民都发明并使用了各种字符编码方案。所以,Windows必须通过代码页支持已经被广泛使用的字符编码。从这种意义看,代码页主要是为了兼容现有的数据、程序和习惯而存在的。
再谈Unicode
Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。Unicode用数字 0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位。码位就是可以分配给字符的数字。UTF-8、 UTF-16、UTF-32都是将数字转换到程序数据的编码方案。
Unicode字符集可以简写为UCS(Unicode Character Set)。早期的Unicode标准有UCS-2、UCS-4的说法。UCS-2用两个字节编码,UCS-4用4个字节编码。UCS-4根据最高位为0的最高字节分成2^7=128个group。每个group再根据次高字节分为256个平面(plane)。每个平面根据第3个字节分为256行(row),每行有256个码位(cell)。group 0的平面0被称作BMP(Basic Multilingual Plane)。将UCS-4的BMP去掉前面的两个零字节就得到了UCS-2。
先看一些数字:每个平面有2^16=65536个码位。Unicode计划使用了17个平面,一共有 17*65536=1114112个码位。其实,现在已定义的码位只有238605个,分布在平面0、平面1、平面2、平面14、平面15、平面16。其中平面15和平面16上只是定义了两个各占65534个码位的专用区(Private Use Area),分别是0xF0000-0xFFFFD和0x100000-0x10FFFD。所谓专用区,就是保留给大家放自定义字符的区域,可以简写为 PUA。
平面0也有一个专用区:0xE000-0xF8FF,有6400个码位。平面0的0xD800-0xDFFF,共2048个码位,是一个被称作代理区(Surrogate)的特殊区域。它的用途将在4.2节介绍。
238605-65534*2-6400-2408=99089。余下的99089个已定义码位分布在平面0、平面 1、平面2和平面14上,它们对应着Unicode目前定义的99089个字符,其中包括71226个汉字。平面0、平面1、平面2和平面14上分别定义了52080、3419、43253和337个字符。平面2的43253个字符都是汉字。平面0上定义了27973个汉字。
UCD是Unicode字符数据库(Unicode Character Database)的缩写。UCD由一些描述Unicode字符属性和内部关系的纯文本或html文件组成。UCD中的文本文件大都是适合于程序分析的Unicode相关数据。其中的html文件解释了数据库的组织,数据的格式和含义。UCD中最庞大的文件无疑就是描述汉字属性的文件Unihan.txt。在UCD 5.0,0中,Unihan.txt文件大小有28,221K字节。Unihan.txt中包含了很多有参考价值的索引,例如汉字部首、笔划、拼音、使用频度、四角号码排序等。这些索引都是基于一些比较权威的辞典,但大多数索引只能检索部分汉字。
以上这些阐述,我也不是很明白,无非是要表明一点,即CJKV汉字(中日韩越统一表意文字),只是一个电脑汉字字符的编码,而且已经得到全世界的公认。这个编码为世界各国使用汉字的人们提供了学习和交流的平台,但与任何政治的、感情的、传统的因素无关。
(本专辑全部结束)
(收集)