字符编码调研(转载,网络资源总结)

http://www.eygle.com/digest/2007/01/zhs16gbk_char.html

http://unicode.org/standard/WhatIsUnicode.html

http://www.regexlab.com/zh/encoding.htm

快速理解一

gbk映射到unicode的意思, 每个gbk编码都对应一个unicode编码, 这两个编码值可以不相同;

gb2312, 简体中文,国标;

big5, 台湾, 繁体中文;

gbk, 兼容了gb2312\big5与其它, 如日韩文字, 为国家指导标准, 非国标;

gbk2k, 扩充了gbk, 国标;

GB2312

范围: 0xA1A1 - 0xFEFE

汉字范围: 0xB0A1 - 0xF7FE

GB2312码是中华人民共和国国家汉字信息交换用编码,全称《信息交换用汉字编码字符集--*本集》,由国家标准总局发布,1981年5月1日实施,通行于大陆。新加坡等地也使用此编码。 GB2312收录简化汉字及符号、字母、日文假名等共7445个图形字符,其中汉字占6763个。GB2312规定"对任意一个图形字符都采用两个字节表示,每个字节均采用七位编码表示",习惯上称第一个字节为"高字节",第二个字节为"低字节"。GB2312- 80包含了大部分常用的一、二级汉字,和9区的符号。该字符集是几乎所有的中文系统和国际化的软件都支持的中文字符集,这也是最*本的中文字符集。其编码范围是高位0xa1-0xfe,低位也是0xa1-0xfe;汉字从0xb0a1开始,结束于0xf7fe。

GBK

范围: 0×8140 - 0xFEFE

GB2312-80 仅收汉字 6763 个,这大大少于现有汉字,随着时间推移及汉字文化的不断延伸推广,有些原来很少用的字,现在变成了常用字,例如:*鎔*的“鎔”字,未收入 GB2312-80,现在大陆的报业出刊只得使用(金+容)、(金容)、(左金右容)等来表示,形式不一而同,这使得表示、存储、输入、处理都非常不方便,对于搜索引擎等软件的构造来说也不是好消息,而且这种表示没有统一标准。从我们对人民日报 98 年数据的处理过程中,得出这样的经验:回填外字最困难的就是如何得到这种表示方法的集合。

为了解决这些问题,以及配合 UNICODE 的实施,全国信息技术化技术委员会于 1995 年 12 月 1 日《汉字内码扩展规范》。GBK 向下与 GB2312 完全兼容,向上支持 ISO-10646 国际标准,在前者向后者过渡过程中起到的承上启下的作用。

GBK是GB2312-80的扩展,是向上兼容的。它包含了20902个汉字,其编码范围是0×8140-0xfefe,剔除高位0×80的字位。其所有字符都可以一对一映射到Unicode2.0。

字集

GBK 共收入21886个汉字和图形符号,包括:

GB2312 中的全部汉字、非汉字符号。

BIG5 中的全部汉字。

与 ISO-10646 相应的国家标准 GB13000 中的其它 CJK 汉字,以上合计 20902 个汉字。

其它汉字、部首、符号,共计 984 个。

GBK 编码区分三部分:

汉字区 包括

GBK/2:OXBOA1-F7FE, 收录 GB2312 汉字 6763 个,按原序排列;

GBK/3:OX8140-AOFE,收录 CJK 汉字 6080 个;

GBK/4:OXAA40-FEAO,收录 CJK 汉字和增补的汉字 8160 个。

图形符号区 包括

GBK/1:OXA1A1-A9FE,除 GB2312 的符号外,还增补了其它符号

GBK/5:OXA840-A9AO,扩除非汉字区。

用户自定义区

即 GBK 区域中的空白区,用户可以自己定义字符。

編碼

GBK 亦采用双字节表示,总体编码范围为 8140-FEFE 之间,首字节在 81-FE 之间,尾字节在 40-FE 之间,剔除 XX7F 一条线。

微 软公司自 Windows 95 简体中文版开始支持 GBK 代码,標準叫法是 Windows codepage 936,也叫做 GBK(國標擴展),它也是 8-bit 的變長編碼。據我所知 GBK 從來沒成爲過正式的國家標準,只不過因爲 Windows 的普及,它已經成爲事實上的標準了。但目前的多数搜索引擎都不能很好地支持 GBK 汉字。

由前电子部科技质量司和国家技术监督局标准化司于1995年12月颁布的指导性规范。(GBK的 K是“扩展”的汉语拼音第一个字母)

GBK作为非 UCS ( ISO/IEC 10646 ) 体系的代码页,适用于中文信息的处理、交换、存储、传输、显现、输入和输出。

GBK 与国家标准 GB 2312-80 信息处理交换码所对应的、事实上的内码标准兼容;同时,在字汇一级支持 ISO/IEC 10646-1 和GB 13000-1 的全部中日韩 (CJK) 汉字(20902字)。GBK除了包含GB2312-80 和GB12345-90中包括的全部非汉字符号外,还涵盖我国台湾地区中文标准交换码TCA-CNS 11643 -92 ( 与其对应的内码为Big5;以下用Big5泛指二者。) 中的绝大多数符号。

从Windows95中文版起,Windows NT 3.51, 4.0, Windows2000, Windows CE, Linux已经全面支持GBK,起到了从GB 2312向Unicode过渡的承上启下的重要作用。

GBK尽管在字汇一级支持CJK,是目前最大的Code Page ;它在体系结构、代码空间上,仍然是完全不同于ISO/IEC 10646 和Unicode的。

BIG5

范围: 0xA140 - 0xF9FE, 0xA1A1 - 0xF9FE

Big5是台湾的IIIT1984年发明的,CNS 11643-1992( Chinese National Standard)

是扩展版本,主要大家用的还是big5

每个字由两个字节组 成,其第一字节编码范围为0xA1~0xF9,第二字节编码范围为0×40~0×7E与0xA1~0xFE,总计收入13868个字 (包括5401个常用字、7652 个次常用字、7个扩充字、以及808个各式符号)

GB18030:

GB18030-2000(GBK2K)在GBK的*础上进一步扩展了汉字,增加了藏、蒙等少数民族的字形。GBK2K从根本上解决了字位不够,字形不足的问题。它有几个特点:

它并没有确定所有的字形,只是规定了编码范围,留待以后扩充。

编码是变长的,其二字节部分与GBK兼容;四字节部分是扩充的字形、字位,其编码范围是首字节0×81-0xfe、二字节0×30-0×39、三字节0×81-0xfe、四字节0×30-0×39。

它的推广是分阶段的,首先要求实现的是能够完全映射到Unicode3.0标准的所有字形。

它是国家标准,是强制性的。

补充:

中文信息编码标准,常用的是GB2312-1980,GB12345,GB13000(GBK),

以及最新标准GB18030。

GB2312的汉字编码规则为:第一个字节的值在0xB0到0xF7之间,第

二个字节的值在0xA0到0xFE之间。

GB12345和GB13000是对GB2312-1980的扩充,所有已经包含在GB2312

中的汉字编码不变,另外增加更多的码位。其编码规则大致为:第一

个字节的值在0×81到0xFE之间,第二个字节的值在0×40到0xFE之间。

GB18030 是最新的汉字编码字符集国家标准, 向下兼容 GBK 和 GB2312 标准。

GB18030 编码是一二四字节变长编码。 一字节部分从 0×0~0×7F 与 ASCII

编码兼容。 二字节部分, 首字节从 0×81~0xFE, 尾字节从 0×40~0×7E 以及

0×80~0xFE, 与 GBK标准*本兼容。 四字节部分,

第一字节从 0×81~0xFE, 第二字节从 0×30~0×39, 第三和第四字节的范围和前

两个字节分别相同。 四字节部分覆盖了从 0×0080 开始, 除去二字节部分已经

覆盖的所有 Unicode 3.1 码位。也就是说, GB18030 编码在码位空间上做到

了与 Unicode 标准一一对应,这一点与 UTF-8 编码类似。

Unicode

Unicode provides a unique number for every character, no matter what the platform, no matter what the program, no matter what the language. It is the official way to implement ISO/IEC 10646.

UTF_8字符集

UTF是Unicode/UCS Transformation Format,即把Unicode转做某种格式的意思。UTF-8(8 位Universal Character Set/Unicode Transformation Format)是一种针对Unicode的可变长度字符编码(定长码),也是一种前缀码。它可以用来表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容,这使得原来处理ASCII字符的软件无须或只须做少部份修改,即可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或传送文字的应用中,优先采用的编码。

UTF-8是UNICODE的一种变长字符编码,由Ken Thompson于1992年创建。现在已经标准化 为RFC 3629。UTF-8用1到6个字节编码UNICODE字符。如果UNICODE字符由2个字节表示,则编码成UTF-8很可能需要3个字节,而如果UNICODE字符由4个字节表示,则编码成UTF-8可能需要6个字节。用4个或6个字节去编码一个UNICODE字符可能太多了,但很少会遇到那样的UNICODE字符。

还有UTF-16/UTF-32,均为UNICODE的不同表现格式。

Hong Kong GCCS

Hong Kong GCCS是香港政府为big5加的3049个字,(Government Chinese Character Set)

香港增补字符集(HKSCS)是后来的标准,包括了Big5和ISO10646的编码,所以HKSCS的big5

版是补充了GCCS的增强版,ISO10646是UCS(universal character set),ISO是政府组织

Unicode是电脑业界组织,不过UCS和Unicode的字库一样

编码字数统计:

GB2312 6763个汉字

GB12345 6866个汉字

GBK 21003个汉字

GB18030 27000个汉字

Big5 13053个汉字

CNS11643 48,027个汉字

ansi编码

不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。

字符与编码的发展

从计算机对多国语言的支持角度看,大致可以分为三个阶段:

 

系统内码

说明

系统

阶段一

ASCII

计算机刚开始只支持英语,其它语言不能够在计算机上存储和显示。

英文 DOS

阶段二

ANSI编码
(本地化)

为使计算机支持更多语言,通常使用 0x80~0xFF 范围的 2 个字节来表示 1 个字符。比如:汉字 '中' 在中文操作系统中,使用 [0xD6,0xD0] 这两个字节存储。

不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。

不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。

中文 DOS,中文 Windows 95/98,日文 Windows 95/98

阶段三

UNICODE
(国际化)

为了使国际间信息交流更加方便,国际组织制定了 UNICODE 字符集,为各种语言中的每一个字符设定了统一并且唯一的数字编号,以满足跨语言、跨平台进行文本转换、处理的要求。

Windows NT/2000/XP,Linux,Java

posted on 2010-03-29 22:21  LN  阅读(1471)  评论(0编辑  收藏  举报