1字符集 iso latin_字符集、编码

大家都知道,计算机里的信息都是以二进制的形式存在,但我们的现实生活中,有英文字母,标点符号,还有汉字等等,计算机可不认识这些"东东",那我们怎么让计算机来认识这些"东东"呢?

那我们就需要对这些"东东"进行编码,编成二进制的形式(计算机能懂的语言),然后给计算机,就行了. 下面我们来介绍各种编码规则.

b3ce4a4f2fe081c0f86f1d4c5ea41fb8.png
图1 各种编码格式

1. ASCII 字符集

我们都知道美国发明了世界第一台计算机,那他们必然会面临一个问题,怎么把自己国家的字符存放在计算机中呢?为解决这个问题,美国人制定了一套编码规则.

0cdbed5417a0527b511dec028368c7b3.png
图2 ASSCII码

如图2所示:

可见字符:就是能看到的,包括英文字母、数字、标点符号(共95个)

控制字符:这个可能不太好理解,其实就是看不到,比如换行符"n",你用word写文章换行符是起到控制作用(换行),默认不可见.(共33个).

美国人将上面的128字符称为ASSCII字符集,每个字符都有对应的码位(每个字符的编号),对每个码位进行二进制编码,就形成了ASSCII码(二进制信息).

2. 扩展ASCII字符集

那么问题来了,美国人用计算机,法国、德国看不下去了,这么好的东西,我也得用用,用着用着,就感觉有点问题,我靠,我国家的一些字符,ASCII字符集根本没有,ASCII字符集太少啦,只有128个,于是乎,ASCII字符集的扩展就产生了.

a518f0e3d91ce01d3a69bea644cb2a90.png
图2 扩展ASCII码

扩展的ASCII码共有128个,这些扩展字符的编码高位均为1,新增的128个字符叫作扩展的ASCII字符集,对应的ASCII码,叫扩展ASSCII码. (欧洲国家的问题差不多解决了,一些落后国家,用不上电脑,暂不谈).

3. GB2312字符集

中国人看到计算机这么火,那也得搞过来玩玩,于是就比较苦逼了,汉字就有几千个,ASCCI码怎么够,加上扩展的也不够啊,得想办法:不用8位,用16位来表示一个字符. 于是乎,GB2312字符集诞生了.

使用分区管理,共有94个区,每个区又有94个位,共计8836个码位.

可能有人问了,为什么要分区管理?

就拿我们读书来说,学生少的话,一个班就够了,学生多的话,得用多个班,这样方便管理,分区管理也是这个思想.

2cba2035cd525aa007a21eba5ef8978e.png
图3 分区管理

d77578007b4d4815485d6a66619e23f0.png
图4 01-09区表示的字符

如图4所示:字符: "y"的码位 0389 (没特别表明的都是:十进制)

03:代表的区号,8:代表在该区的第8行,9:代表在该区的第9列

7cbc87d0f9752d02fa621d1fa58ac9c5.png
图5 16-55区表示的字符

a02d25802cec8d243fcfd716107a02e7.png
图6 56-87区表示的字符

如图6所示:"侃" 字的码位是多少?

刚才我们只是知道每个字符的码位,那怎么进行相对应的编码呢?

f286cf21a434d24f727557304e95b7c3.png
图7 字符的编码

例子:侃的码位是:5709

① 进制转换:(为观察方便,我们统一采用十六进制:0x)

57对应的十六进制:0x39
09对应的十六进制:0x09

② 相加操作:

0x39 + 0xA0 = 0xD9
0x09 + 0xA0 = 0xA9

③ 合成:

0xD90xA9

为什么都要加上:0xA0

不太清楚...

eb12ebc560c8d60de763f76b0dad042c.png
图8 GB2312

4.GBK字符集

GB2312字符集可以包括6763个汉字,但后来发现中国的汉字实在太多了,有很多汉字不在GB2312中,于是乎,利用GB2312里的空码位,并且不在规定它的低8位一定得大于127,只要保证高8位大于127即可.

通过以上方式,新增了近20000个汉字与符号.(这样的字符集被称为:GBK字符集,对应的编码就是:GBK码).

5.GB18030字符集

到后来中国许多的少数民族也使用计算机,于是乎,在GBK字符集的基础上,又新增了几千个少数民族需用到的字符,这样的字符集被称为:GB18030字符集.,对于的编码就称为:GB18030编码.

说到这,问题又来了,中国根据自身的需要设置了这么多的编码规则,那别的国家呢,如果照这样下去...

420b4a94ba6fc99562781700c7b3bcb1.png
图9 哈哈,各种编码

6. Unicode 标准

一个叫 ISO 的组织看不下去了,每个国家都搞自己的编码,那太乱了,于是乎 ,Unicode标准就诞生了.

有人说,Unicode是字符集,有人说,Unicode是一种编码规则,其实Unicode是一种标准,包含字符集以及对应的编码规则. (这个大家可能不太理解,看到最后就会明白了.)

Unicode的思想很简单,把世界上所有的字符都包含在内,并进行编号.

① UCS-2字符集

一开始 Unicode使用的是:UCS-2字符集,它的作法与ASCII字符集是一样的,给每个字符进行编号,然后编码.不过它的范围更广,包含16位,可表示65536个字符,如图10所示:

92cfa7fd4ea96543a3af7959896b774f.png
图10 UCS-2字符集

② UCS-4字符集

后来,又发现了问题,世界各个国家所包含的字符远不止65536个字符,于是乎,UCS-4字符集诞生了,它用32位来表示一个字符,可表示近43亿个字符.

9b71f43e3be442d68082ffe6c38c75de.png
图11 UCS-4字符集

虽说,UCS-4字符集能表示世界上所有的字符,但它并没有被世界很好的接受,它所需要的存储空间比较大,ASCII码本来只要8位,你来搞一脚,就需要32位,GB2312本来需要16位,现在需要32位.

UTF-8编码

后来由于互联网时代的到来,各国的信息交流愈加频繁,各国不得不重新思考编码问题,于是乎,UTF-8编码规则诞生了.(UTF-8是对UCS-4字符集的一种重新编码,记住,UTF-8是一种编码,不是字符集,同一个字符集可以有不同的编码规则.)

UTF-8 : 每次传送8位数据,并且是一种可变长的编码格式,UTF-8将UCS-4的码位分成4个区间,如图12所示:

aca95589589753c451b34bdb99c11d1f.png
图12 划分区间

第一个区间:0x 0000 0000 至 0x0000 007F:
一个字节,以0开关

第二个区间:0x 0000 0080 到 0x0000 07FF:
对应的是两个字节,第一个字节:110开头,第二个字节:10开头

第三区间:0x 0000 0800 至 0x0000 FFFF:
对应的是三个字节,第一个字节:1110开头,第二个字节:10开头,第三个字节:10开头

第四区间:0x0001 0000 至 0x 0010 FFFF:
对应的是四个字符,第一个字符:11110开头,第二字节:10开头,第三个字节:10开头,第四个字节:10开头

问题:UTF-8 到底是怎么进行编码的?

以 UCS-4字符集的""字来举例.

王的码位:0x0000 738B

转化为二进制:0000 0000 0000 0000 0000 0111 0011 1000 1011

很明显:王的码位是在:第三区间,从后往前,依次插到对应的位置中,以下步骤如图13所示:

20e54e071a30907fd0a03a8bbab88f9e.png
图13 王的UTF-8编码

c595678edf15665548dad62aee71b390.png
图14 实验

现在很多的网站都使用UTF-8编码,但我们不一定非要使用UTF-8编码. 这根据我们的需求而定,如果是使用的是中文,完全可以用GBK字符集可以搞定,毕竟所用内存是2个字节,而UTF-8编码要用三个字节.

附加:说到ASCII,大家就会想到ACSSII码,ACSII字符集和ASCII编码,ASCII编码其实不算严格意义上的编码,它只是对应字符码位的一种二进制的映射,后来的UCS-2字符集和UCS-4字符集也是采用这种不是严格意义上的编码规则(理解为Unicdoe码位:对码位进行二进制的映射),结果占用了比较大的内存,所以才诞生了 UTF-8和UFT-16分别对UCS-2字符集和UCS-4字符集进行重新编码(严格意义上的编码),减少了内存的占用.

参考:

https://www.bilibili.com/video/BV1gZ4y1x7p7?from=search&seid=3317940935922421574​www.bilibili.com https://www.bilibili.com/video/BV1XK4y1t7D4​www.bilibili.com
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值