汉字编码基础知识(一)

2023-05-16

<script src="win.js" type="text/javascript"></script> 4.1)基础知识
4.1.1) GB2312
范围: 0xA1A1--0xFEFE
汉字范围: 0xB0A1--0xF7FE
编码方式:
GB2312规 定"对任意一个图形字符都采用两个字节表示,每个字节均采用七位编码表示",习惯上称第一个字节为"高字节",第二个字节为"低字节"。
字符集:
       GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。
与ASCII有重叠,通行方法是将GB码两个字节的最高位置1以示区别。
背景知识:
GB2312 码是中华人民共和国国家汉字信息交换用编码,全称《信息交换用汉字编码字符集--基本集》,由国家标准总局发布,1981年5月1日实施,通行于大陆。新加坡等地也使用此编码。该字符集是几乎所有的中文系统和国际化的软件都支持的中文字符集,这也是最基本的中文字符集。其编码范围是高位 0xa1-0xfe,低位也是0xa1-0xfe;汉字从0xb0a1开始,结束于0xf7fe。16-87区为汉字区 0xb0-0xf7)。故而GB2312最多能表示6763个汉字。
备注:
·         GB2312 的原文还是区位码,从区位码到内码,需要在高字节和低字节上分别加上 A0
·         DBCS 中, GB 内码的存储格式始终是 big endian ,即高位在前。
·         GB2312 的两个字节的最高位都是 1 。但符合这个条件的码位只有 128*128=16384 个。所以 GBK GB18030 的低字节最高位都可能不是 1 。不过这不影响 DBCS 字符流的解析:在读取 DBCS 字符流时,只要遇到高位为 1 的字节,就可以将下两个字节作为一个双字节编码,而不用管低字节的高位是什么。
关键词: 中国国家标准, gb2312, 汉字:
4.1.2)GBK
范围:0×8140 - 0xFEFE
汉字范围:
GBK/2:OXBOA1-F7FE, 收录 GB2312 汉字 6763 个,按原序排列;
GBK/3:OX8140-AOFE,收录 CJK 汉字 6080 个;
GBK/4:OXAA40-FEAO,收录 CJK 汉字和增补的汉字 8160 个。
编码方式:
GBK 亦采用双字节表示,总体编码范围为 8140-FEFE 之间,首字节在 81-FE 之间,尾字节在 40-FE 之间,剔除 XX7F 一条线。
字符集:
GBK 共收入21886个汉字和图形符号,包括:
GB2312 中的全部汉字、非汉字符号;
BIG5 中的全部汉字;
与 ISO-10646 相应的国家标准 GB13000 中的其它 CJK 汉字;
以上合计 20902 个汉字。
其它汉字、部首、符号,共计 984 个。
背景知识:
       GBK 向下与 GB2312 完全兼容,向上支持 ISO-10646 国际标准,是一种过渡时期的编码实现方式。
GBK是GB2312-80的扩展,是向上兼容的。它包含了20902个汉字,其编码范围是0x8140-0xfefe,剔除高位0x80的字位。其所有字符都可以一对一映射到Unicode2.0。
备注:
微软公司自Windows 95 简体中文版开始支持 GBK 代码,标准叫法是 Windows codepage 936,也叫做 GBK(国家标准),它也是 8-bit 的变长编码。据我所知 GBK从来没成为正式的国家标准,只不过因为Windows 的普及,它已经成为事实上的标准了。但目前的多数搜索引擎都不能很好地支持 GBK 汉字。
 
4.1.3) TW-BIG5:大五码
范围:0xA140 - 0xF9FE, 0xA1A1 - 0xF9FE
编码方式:
每个字由两个字节组 成,其第一字节编码范围为0xA1~0xF9,第二字节编码范围为0×40~0×7E与0xA1~0xFE。
字符集:
总计收入13868个字 (包括5401个常用字、7652 个次常用字、7个扩充字、以及808个各式符号)。
背景知识:
Big5是台湾的IIIT1984年发明的,CNS 11643-1992( Chinese National Standard)是扩展版本,主要大家用的还是big5。BIG5又称大五码或五大码,1984年由台湾财团法人信息工业策进会和五间软件公司宏碁 (Acer)、神通 (MiTAC)、佳佳、零壹 (Zero One)、大众 (FIC)创立,故称大五码。
 
4.1.4)unicode
国际标准组织于1984年4月成立ISO/IECJTC1/SC2/WG2工作组,针对各国文字、符号进行统一性编码。1991年美国跨国公司成立UnicodeConsortium,并于1991年10月与WG2达成协议,采用同一编码字集。 目前 Unicode 是采用 16 位编码体系,其字符集内容与ISO10646的 BMP(BasicMultilingualPlane)相同。
编码方法: Unicode 标准始终使用十六进制数字,而且在书写时在前面加上前缀 “U+” ,例如字母 “A” 的编码为 004116 。所以 “A” 的编码书写为 “U+0041”
 
Unicode 编码表
0000-0FFF
8000-8FFF
10000-10FFF
20000-20FFF
28000-28FFF
 
 
 
1000-1FFF
9000-9FFF
 
21000-21FFF
29000-29FFF
 
 
 
2000-2FFF
A000-AFFF
 
22000-22FFF
2A000-2AFFF
 
 
 
3000-3FFF
B000-BFFF
 
23000-23FFF
 
 
 
 
4000-4FFF
C000-CFFF
1D000-1DFFF
24000-24FFF
2F000-2FFFF
 
 
 
5000-5FFF
D000-DFFF
 
25000-25FFF
 
 
 
 
6000-6FFF
E000-EFFF
 
26000-26FFF
 
 
 
 
7000-7FFF
F000-FFFF
 
27000-27FFF
E0000-E0FFF
 
 
 
 
 
4.1.5)utf-8
utf8 是我们常用的编码方式, UTF-8 UNICODE 的一种变长字符编码,由 Ken Thompson 1992 年创建。现在已经标准化 RFC 3629
web 开发中使用 utf8 编码能完全解决字符集问题。其实 utf8 unicode 字符集的一种物理实现,它描述了如何高效的存储 unicode 的内码(就是上面说的字符在字符集的顺序码), RFC2044 文档 (http://www.ietf.org/rfc/rfc2044.txt?number=2044) 描述了如何从一个内码转换成 utf8 格式的算法。英文不好没关系,看这个转换表就会马上明白了:
   UCS-4 range (hex.)           UTF-8 octet sequence (binary)
   0000 0000-0000 007F   0xxxxxxx
   0000 0080-0000 07FF   110xxxxx 10xxxxxx
   0000 0800-0000 FFFF   1110xxxx 10xxxxxx 10xxxxxx
   0001 0000-001F FFFF   11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
   0020 0000-03FF FFFF   111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
   0400 0000-7FFF FFFF   1111110x 10xxxxxx ... 10xxxxxx
         上面的表格左边是 16 进制表示的 unicode 内码,最后一行的 16 进制数 “7FFF FFFF” utf8 所能表示的内码的最大值,换成 10 进制是这样的一个数: 2147483647 (够大吧 :) )上面表格中右边一列就是 utf8 的二进制格式 , 转换规则可谓一目了然。
UTF-8 编码,这是一种变长编码,它将基本 7 ASCII 字符仍用 7 位编码表示,占用一个字节(首位补 0 )。而遇到与其它 Unicode 字符混合的情况,将按一定算法转换,每个字符使用 1-3 个字节编码,并利用首位为 0 1 进行识别。这样对以 7 ASCII 字符为主的西文文档就大大节省了编码长度(具体方案参见 UTF-8 )。
UTF-8 使用可变长度字节储存,使计算机程序设计变得复杂。 ( 故此,在计算机程序或操作系统内部,多采用 UCS-2 编码。 )
在旧式的中文、日文及韩文编码之中,每字符都使用 2 字节储存,而 UTF-8 须使用 3 字节。 ( 采用 UTF-16 编码则可只使用 2 字节储存。(编者言:事实上 utf-8 又是一种美国标准的做法,为了节约编码空间而不考虑国际通用性的一种造成事实的美国标准。)
4.1.6) unicode编码方式与实现方式
unicode是一种世界语言文字的编码标准。UCS 和 Unicode 只是分配整数给字符的编码表. Unicode 的编码方式与 ISO 10646 的 通用字符集(Universal Character Set,UCS)概念相对应,目前的用于实用的 Unicode 版本对应于 UCS-2,使用16 位的编码空间。也就是每个字符占用2个 字节。上述16位 Unicode 字符构成 基本多文种平面(Basic Multilingual Plane, 简称 BMP)。
最新(但未实际广泛使用)的 Unicode 版本定义了16个 辅助平面,两者合起来至少需要占据21位的编码空间,比3字节略少。(UCS-4)
将一个 ASCII 或 Latin-1 的文件转换成 UCS-2 只需简单地在每个 ASCII 字节前插入 0x00。如果要转换成 UCS-4, 则必须在每个 ASCII 字节前插入三个 0x00。
Unicode 的实现方式不同于编码方式。一个字符的 Unicode 编码是确定的。但是在实际传输过程中,由于不同 系统平台 的设计不一定一致,以及出于节省空间的目的,对 Unicode 编码的实现方式有所不同。 Unicode 的实现方式称为 Unicode 转换格式 Unicode Translation Format ,简称为 UTF )。
      UTF-8 不使用大尾序和小尾序的形式。每个使用 UTF-8 储存的字符,除了第一个字节外,其余字节的头两个位都是以 "10" 开始, 使文字处理器能够较快地找出每个字符的开始位置。

* 0xxxxxxx                                               (00-7f)  

* 110xxxxx 10xxxxxx                                      (c0-df)(80-bf)  

* 1110xxxx 10xxxxxx 10xxxxxx                             (e0-ef)(80-bf)(80-bf)  

* 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx                    (f0-f7)(80-bf)(80-bf)(80-bf)  

* 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx           (f8-fb)(80-bf)(80-bf)(80-bf)(80-bf)  

* 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx (fc-fd)(80-bf)(80-bf)(80-bf)(80-bf)(80-bf)  
 
其它中文编码:
GB18030:
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 编码类似。
 
Hong Kong GCCS
Hong Kong GCCS是香港政府为big5加的3049个字,(Government Chinese Character Set)香港增补字符集(HKSCS)是后来的标准,包括了Big5和ISO10646的编码,所以HKSCS的big5版是补充了GCCS的增强版。
 
编码字数统计 :
GB2312              6763个汉字
GB12345           6866个汉字
GBK                   21003个汉字
GB18030          27000个汉字
Big5                  13053个汉字
CNS11643      48,027个汉字
 
汉字编码转化
GB2312
第一节字,行码0xA1-0xFE
第二节字,列码0x40-0x7E, 0xA1-0xFE,每行157个汉字
      其中:1-3/38-40行(A1-A3, C6-C8) 全角字母、符号
            4-39行(A4-C6) 一级汉字5401字
           41-89行(C9-F9) 二级汉字7652字
      例如:BIG5 码16行121列同样表示“啊”字,编码为0xB0DA。
 
BIG5
第一节字,行码0xA1-0xFE
第二节字,列码0x40-0x7E, 0xA1-0xFE,每行157个汉字
      其中:1-3/38-40行(A1-A3, C6-C8) 全角字母、符号
            4-39行(A4-C6) 一级汉字5401字
           41-89行(C9-F9) 二级汉字7652字
      例如:BIG5 码16行121列同样表示“啊”字,编码为0xB0DA。
第一字节
第二字节
字区
制定
A1..A2
40..7E, A1..FE
各种符号区
1984
A3
40..7E, A1..BF
各种符号区 (包括标点符号、ASCII 全角符号、注音符号等)
1984
A3
E1
欧元符号
CP950
A4..C5
40..7E, A1..FE
常用字区
1984
C6
40..7E
常用字区
1984
C6
A1..FE
罕用符号区
倚天
C7
40..7E, A1..FE
罕用符号区 (包括日文、俄文等)
倚天
C8
40..7E, A1..D3
罕用符号区 (包括俄文、输入法特殊符号等)
倚天
C9..F8
40..7E, A1..FE
次常用字区
1984
F9
40..7E, A1..D5
次常用字区
1984
F9
D6..DC
七个扩充字
倚天
F9
DD..FE
表格符号区
倚天
Table 1. BIG5 字区与编码范围
 
扩充字
BIG5 码
Unicode
BIG5_1984 的同义字
0xF9D6
0x88CF
0xF9D7
0x92B9
0xF9D8
0x7CA7
0xF9D9
0x58BB
0xF9DA
0x6052
0xF9DB
0x7881
0xF9DC
0x5AFA
Table 2. 七个扩充字
 
编码
第一个字节
第二个字节
第三个字节
第四个字节
GB2312
0xB0 - 0xF7
0xA0 - 0xFE
 
 
GBK
0x81 - 0xFE
0x40 - 0xFE
 
 
GB18030 的双字节
0x81 - 0xFE
0x40 - 0x7E, 0x80 - 0xFE
 
 
GB18030 的四字节
0x81 - 0xFE
0x30 - 0x39
0x81 - 0xFE
0x30 - 0x39
Table 3. GB 的汉字编码规则
 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

汉字编码基础知识(一) 的相关文章

随机推荐