您的位置:首页 > 其它

Unicode与UTF8:字符集与字符编码的关系

2018-02-07 19:00 253 查看

一、基本概念

  1、什么是字符集:

字符集只是一个规则集合的名字,字符集 =字库表(character repertoire)、编码字符集(coded character set)、字符编码(character encoding form)。

2、字库表:

字库表是一个相当于所有可读或者可显示字符的数据库,字库表决定了整个字符集能够展现表示的所有字符的范围。

3、编码字符集:(简称字符集,如Unicode、ASCII)

编码字符集,用一个编码值code point来表示一个字符(即该字符在子库表中的位置),这个值称为字符对应于编码字符集(如:Unicode、ASCII)的序号。

4、字符编码:

字符编码,是编码字符集和实际存储数值之间的转换关系。字符,是根据字符编码方案转换为一个二进制数值存储在计算机中的。所以,字符编码是定义在字符集上的映射规则。(字符-------->计算机中的实际存储值)

注意:编码字符集Unicode,有UTF-8、UTF-16、UTF-32等多种字符编码

 2、常见的编码字符集(简称字符集)

    Unicode:也叫统一字符集,它包含了几乎世界上所有的已经发现且需要使用的字符(如中文、日文、英文)

    ASCII:早期的计算机系统只能处理英文,所以ASCII也就成为了计算机的缺省字符集,包含了英文所需要的所有字符。

    GB2312:中文字符集,包含ASCII字符集。ASCII部分用单字节表示,剩余部分用双字节表示。

    GBK:GB2312的扩展,但完整包含了GB2312的所有内容。

    GB18030:GBK字符集的超集,常叫大汉字字符集,也叫CJK(Chinese,Japanese,Korea)字符集,包含了中、日、韩三国语言中的所有字符。

二、实例案例

  1、ASCII:

ASCII既是编码字符集,又是字符编码

ASCII直接将字符在编码字符集中的序号作为字符在计算机中存储从数值,

例如:在ASCII中A在表中排第65位,序号是65,而编码后A的数值是0100 0001,也即十进制

的65的二进制转换结果。

2、Unicode:

编码字符集:Unicode

字符编码:UTF-8

为了更好的理解后面的实际应用,我们这里简单的介绍下UTF-8的编码实现方法。即UTF-8的物理存储和Unicode序号的转换关系。 UTF-8编码为变长编码。最小编码单位(code unit)为一个字节。一个字节的前1-3个bit为描述性部分,后面为实际序号部分。

如果一个字节的第一位为0,那么代表当前字符为单字节字符,占用一个字节的空间。0之后的所有部分(7个bit)代表在Unicode中的序号。

如果一个字节以110开头,那么代表当前字符为双字节字符,占用2个字节的空间。110之后的所有部分(5个bit)加上后一个字节的除10外的部分(6个bit)代表在Unicode中的序号。且第二个字节以10开头

如果一个字节以1110开头,那么代表当前字符为三字节字符,占用2个字节的空间。110之后的所有部分(5个bit)加上后两个字节的除10外的部分(12个bit)代表在Unicode中的序号。且第二、第三个字节以10开头

如果一个字节以10开头,那么代表当前字节为多字节字符的第二个字节。10之后的所有部分(6个bit)和之前的部分一同组成在Unicode中的序号。

具体每个字节的特征可见下表,其中x代表序号部分,把各个字节中的所有x部分拼接在一起就组成了在Unicode字库中的序号

Byte 1 Byte 2
Byte3

0xxx xxxx  

110x xxxx 10xx xxxx
 

1110 xxxx 10xx xxxx
10xx xxxx

我们分别看三个从一个字节到三个字节的UTF-8编码例子:

实际字符 在Unicode字库序号的十六进制
在Unicode字库序号的二进制 UTF-8编码后的二进制
UTF-8编码后的十六进制

$ 0024
010 0100 0010 0100
24

¢ 00A2
000 1010 0010 1100 0010 1010 0010
C2 A2

€ 20AC
0010 0000 1010 1100 1110 0010 1000 0010 1010 1100
E2 82 AC

细心的读者不难从以上的简单介绍中得出以下规律:

3个字节的UTF-8十六进制编码一定是以E开头的

2个字节的UTF-8十六进制编码一定是以C或D开头的

1个字节的UTF-8十六进制编码一定是以比8小的数字开头的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: