字符
字符分为可见字符和控制字符
1、可见字符
英文字母,数字,标点符号
2、控制字符(不可见字符)
如:回车、换行
字符集
码位 | 代表字符 |
---|---|
0 | 空字符 |
1 | 标题开始 |
2 | 正文开始 |
… | … |
31 | 单元分割符 |
… | … |
65 | A |
… | … |
90 | Z |
… | … |
127 | 删除 |
码位就是一个字符编号,这样的一张表就是字符集。可见字符一共95个,控制字符一共33个。
ASCAII码表
码位 | 代表字符 | ASCAII码 |
---|---|---|
0 | 空字符 | 00000000 |
1 | 标题开始 | 00000001 |
2 | 正文开始 | 00000002 |
… | … | |
31 | 单元分割符 | 00011111 |
… | … | |
65 | 01000001 | |
… | … | |
90 | Z | 01111010 |
… | … | |
127 | 删除 | 01111111 |
ASCAII码 就是每个字符编号对应的二进制
一些欧洲国家使用计算机的时候,原来的128个字符无法满足需求,就在此基础上进行扩展
扩展ASCAII码表
从编号128后开始往后排,到编号255一共扩展了128个字符,对应的表就是扩展ASCAII码表
往后,中国开始使用计算机的时候,常用的汉字就有几千个,256个字符无法满足需求,需要对字符集进行扩展。
采用两个字节来存储
GB2312字符集
首先需要设计字符集
使用分区管理,一共划分了94个区,一个区有94个字符。总共包含了8836个字符
01-09区收录除汉字外的682个字符。
10-15区为空白区,没有使用。
16-55区收录3755个一级汉字,按拼音排序。
56-87区收录3008个二级汉字,按部首/笔画排序。
88-94区为空白区,没有使用。
这个字符集就叫做GB2312字符集
举例:比如03区y字符的编号是多少呢?
答 : 0389
03 代表03区
89代表在第8行第9列
我们只给字符进行了编号,并没有规定字符在计算机中如何进行存储。
如:汉字 侃的编号是5709
为什么要与0XA0相加呢?这样可以让每个字符的高8位和低8位都大于127,可以和ASCAII区分开来。
GB2312字符集有6736个汉字
GBK字符集
GBK字符集是对GB2312字符集 的一个扩展
不在规定低8位需要大于127,这样扩充接近2万个汉字和符号
这样的编码就称作GBK编码
GB18030字符集
后来又新增了少数民族的字符,对应的编码就是GB18030编码
世界上有很多国家,如果每个国家都有自己对应的一套编码,国家与国家之间的信息交流就会非常混乱。
后来,国际化标准组织(International Organization for Standardization)提出了Unicode标准,来统一规范字符编码
Unicode标准包括了世界上所有字符,以及对应的编码。
UCS-2字符集
像ASCAII字符集一样给所有字符编号,然后将编号直接转为二进制
一共可以表示65535个字符(2个字节)
UCS-4字符集
65535个字符还是无法满足世界上所有字符,
采用4个字节来存储字符,一共可以代表2^32个字符,也就是42亿个字符
这样就可以包括世界上所有的字符了。
但是,UCS-4字符集采用了4个字节来存储一个字符,会造成空间的浪费。比如原先ASCAII字符集存储字符a只需要一个字节,采用UCS-4编码却需要4个字节
这样的编码并没有被各国很好地接受。
UTF-8编码
基于UCS-4字符集,对字符进行编码
UTF-8编码规则
将UCS-4字符集划分为4个区间
举例:
王字在UCS-4字符集对应的编号是0X0000 738B
对应的二进制数是
0000 0000 0000 0000 0111 0011 1000 1011
对应划分的区间为
最终的二进制编码为
1110 0111 1000 1110 1000 1011
转化为16进制,结果是
0Xe7 0X8e 0X8b
图解如下:
视频地址:
https://www.bilibili.com/video/BV1gZ4y1x7p7?from=search&seid=3675790843208692425