Unicode

一.   字节和字符:

1)        字节(octet):顾其英文名而思义,就是一个八位的存储单元,取值范围一定是0~255;

2)        字符(character):就是一个语言上的符号,"中"字就是一个字符。字符所占的大小由其编码方式解决,比如"中"在UTF-8中占3个字节(0xE4A8AD),而在GBK中,则占两个字节(0xD6D0)。

二.字符集和编码:

1)        字符集:字符的集合,像Unicode字符集,目标就是收纳了这个世界上所有语言的文字、

2)        符号等; 字符编码:注意,字符集只是规定了有哪些字符,而最终决定采用哪些字符,每一个字符用多个字节表示等问题,则是由编码来决定的。像Unicode字符集的编码方式有很多,诸如UTF-8、UFT-16、UTF-32等。

三.编码方式:

1)中文编码方式:

GB2312:采用2个字节。简体字的编码规范,也包括其他的符号、字母、日文假名等,共7445个图形字符,其中汉字占6763个

GBK:采用了2个字节。GB2312明显收录的汉字不够,于是增加了大量不常用汉字,还加入了几乎所有的Big5中的繁体汉字之后便成了GBK。

GB18030:与前两者不同,采用了变长的编码方式,有1、2、4个字节的编码长度。1个字节编码与ASCII兼容,2个字节编码与GBK兼容,4个字节主要是收录了少数民族的文字等。GB18030诞生的原因类似于GBK,就是增加了大量的汉字,多收录了藏文、蒙文、维吾尔文等主要的少数民族文字。GB18030现在是国家非手持/非嵌入式设备的强制性标准。但是GB18030与前者不同的是,所有的Unicode编码都可以转换为GB18030,而且GB18030除了兼容GBK以及Unicode的BMP部分外,其余的Unicode扩展平面和它的4字节扩展平面都是简单直接的映射

2) UTF-16(采用两个字节存储):

UTF-16BE

00 41 00 42 00 43

UTF-16LE

41 00 42 00 43 00

UTF-16(Big Endian)

FE FF 00 41 00 42 00 43

UTF-16(Little Endian)

FF FE 41 00 42 00 43 00

UTF-16(不带BOM)

00 41 00 42 00 43

3)UTF-32(采用四个字节存储):

UTF-32BE

00 00 00 41 00 00 00 42 00 00 00 43

UTF-32LE

41 00 00 00 42 00 00 00 43 00 00 00

UTF-32(Big Endian)

00 00 FE FF 00 00 00 41 00 00 00 42 00 00 00 43

UTF-32(Little Endian)

FF FE 00 00 41 00 00 00 42 00 00 00 43 00 00 00

UTF-32(不带BOM)

00 00 00 41 00 00 00 42 00 00 00 43

4)UTF-8(采用可变字节存储):

UCS-2(UCS-4)

第一字节

第二字节

第三字节

第四字节

第五字节

第六字节

U+0000 U+007F

0xxxxxxx

 

 

 

 

 

U+0080 .. U+07FF

110xxxxx

10xxxxxx

 

 

 

 

U+0800 .. U+FFFF

1110xxxx

10xxxxxx

10xxxxxx

 

 

 

U+10000..U+10FFFF

11110xxx

10xxxxxx

10xxxxxx

10xxxxxx

 

 

00200000-03FFFFFF

111110xx

10xxxxxx

10xxxxxx

10xxxxxx

10xxxxxx

 

04000000-7FFFFFFF

1111110x

10xxxxxx

10xxxxxx

10xxxxxx

10xxxxxx

10xxxxxx

因其采用(UCS-4)规范,即四个字节存储,理论上UTF-8可以达到6个字节编码,克服了UTF-16和UTF-32带来的空间浪费.而汉字的unicode范围(4e00-9fa5 即值为19968- 40869),需两个字节存储,所以根据上表得知需占三个字节.如汉字“中”的Unicode码为4E2D --01001110 00101101--UTF-8存储为:

11100100 10111000 10101101

相关推荐