字符集和Unicode编码以及字库

字符集和字符编码的关系 :

字符集是书写系统字母与符号的集合,为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point);字符集种类较多,每个字符集包含的字符个数不同,常见的字符集名称:ASCII字符集、GB2312字符集、GB18030字符集、UNICODE字符集等。

字符编码则是将字符映射为一特定的字节或字节序列,是一种规则,将「码位」转换为字节序列的规则(编码/解码 可以理解为 加密/解密 的过程)。通常特定的字符集采用特定的编码方式(即一种字符集对应一种字符编码(例如:ASCII、IOS-8859-1、GB2312、GBK,都是即表示了字符集又表示了对应的字符编码)),因此基本上可以将两者视为同义词

Unicode和Unicode编码:

Unicode是一个字符编码的标准规范,而UTF-8/UTF-16/UTF-32只是对这个标准规范的具体实现,可称为Unicode编码

 

Unicode 目前规划的总空间是17个平面(平面0至16,开头是0x0-----0x10),0x0000 至 0x10FFFF。每个平面有 65536 个码点。2字节:2^16=65536,4字节:2^32=4,294,967,296

0平面是2字节字符,1-16平面是4字节字符。

BMP 的字符是 Unicode 中最基础和最常用的一部分,以 UTF-16 编码时使用2字节,以 UTF-8 编码时使用1至3字节。

超出 BMP(平面0) 的字符以 UTF-16 或 UTF-8 编码都需要4字节。

另外还有一个比较少用的编码形式,UTF-32,它编码任何 Unicode 字符都需要4个字节。

17*65536 = 1,114,112,32位可容纳下所有的码点

由于目前unicode的表的大小可以算到如果使用utf-32编码的话,用32个bit就能完全容纳下所有的码点,所以utf-32的特点是每一个字符编码后都是4个字节,是定长的,相对的utf-8和utf-16都是变长的

1、ASCII码 :128个字符。

特殊的:

0-9是48-57

A-Z 是65-90

a-z 是97-122

2、Unicode(UTF-16)

联盟为每个字母中的每个柏拉图字母分配了一个魔幻数字,其写法如下:U + 0639。这个幻数称为代码点

3、UTF-8

在UTF-8中,从0-127的每个代码点都存储在一个字节中【ASCALL码】。实际上,只有代码点128和更高的代码点才使用2、3(最多6个字节)存储相比于只使用英文字母的美国人使用UTF-8比使用UTF-16减少一半内存

 

传统的“两字节存储”方法称为UCS-2(因为它有两个字节)或UTF-16(因为它有16位)

4、没有纯文本这样的东西。

如果您在内存,文件或电子邮件中有字符串,则必须知道它的编码格式,否则将无法解释它或将其正确显示给用户。

5、乱码

如果字符集和字符编码两者之间的转换规则不统一标准,就会乱码现象。简单的说乱码的出现是因为:编码和解码时用了不同或者不兼容的字符集。

字库

 字库就是字型库(FONT LIBRARY),其实计算机上显示的每个字符(不管它是哪种语言的),都是一个小的图案。字库就是把这些小的图案以图片的某种形式保存起来,需要显示的 时候还原出来就可以了。在WINDOWS操作系统里的字库存放在系统盘windows/fonts文件夹下,在linux操作系统中字库存放在这/usr /share/fonts/文件夹下。

 

 

 

 

 

 

posted @ 2020-07-13 16:32  好Wu赖  阅读(1812)  评论(0编辑  收藏  举报