2020-08-08

只为自己方便使用,原文请见下方:

学习来源:知乎

https://zhuanlan.zhihu.com/p/26261762

 

GB2312、GBK、GB18030 - 中文

BIG5 - 中文繁体

ASCII编码

ASCII(American Standard Code for Information Interchange)编码是美国制定的一套字符编码方案,字符集中有0~127共计128个码点,每一个码点都可以使用7位二进制表示。编码方式非常直接,就是码点对应的二进制。

因为计算机是按字节分配内存的,尽管ASCII字符集的码点只需要7位,实际上要占用一个字节。所以,有2^8-2^7=128个字符空间是没有用到的。

后来,为了解决部分西欧语言的问题,有人想到利用这剩下的128来表示更多的字符,这些方法统称为EASCII(Extended ASCII),其中著名的有ISO 8859-1(又称作Latin 1)。

GB XXX编码

对于汉字来说,ASCII剩下的128个字符显然是不够用的。

这难不倒我们,GB2312率先出场。GB2312收录了共7445个图形字符,其中汉字占6763个。显然码点的个数已经超出了1个字节的表示范围,所以使用两个字节来编码一个汉字。

考虑到与ASCII的兼容,规定码点在0~127范围内的字符和ASCII相同,还是1个字节表示1个字符。

由于GB2312只收录6763个汉字,还有不少汉字并未有收录。于是微软基于GB2312扩展出GBK。GBK共收录21886个汉字和图形符号,其中汉字21003 个。GBK的首字节在0x81到0xFE 之间,尾字节在0x40到0xFE 之间,一共有2万多个码点。

机智的你有没有猜到,GB是Guo Biao(国标)的意思,K是Kuo Zhan(扩展)的意思…

再后来,GB18030推出,兼容GB2312,基本兼容GBK,共收录汉字70244个。GB18030采用了多字节编码方案,支持更大的编码空间。

 

UNICODE与UTF-XXX

UNICODE是一个世界级的字符集,全世界的每一个字符都有唯一的码点。码点具有这样的形式U+[XX]XXXX,其中,X是一个十六进制数字。UNICODE的范围目前是U+0000~U+10FFFF,超过100万。感觉好任性,还有哪个字符没收录进来~

因为码点太多了,为了方便管理,把每65536个码点归为一组,称为一个平面(Plane),共有17个平面。

第一个平面,即Plane 0,又叫做BMP(Basic Multilingual Plane,基本多语言平面),码点范围是U+0000~U+FFFF,日常用到的绝大多数字符都在这个平面。

参考ASCII的编码方法,UNICODE的编码方法也可以如此直接,即直接存储码点对应的二进制。

额,因为UNICODE的码点最少也要4个字节,所以,意味着曾经在ASCII只需要1个字节的字符们要占用4个字节了,并且,这还和ASCII不兼容。

我们千辛万苦找到UNICODE,却又遇不兼容和占空间的问题,好忧伤啊。

但这也不能怪UNICODE,人家是字符集,只是查个码点,具体如何编码到计算机是不管的。

UTF-XXX

UTF(Unicode Transformation Format),即UNICODE的码点转换为最终的编码的格式。出于不同的目的,有多种UTF编码方法:UTF-8、UTF-16、UTF-32。

其中,UTF-32便是直接将码点转换为4字节二进制的方法。

考虑到大多数人都在BMP(U+0000~U+FFFF)里玩,只需要使用两个字节编码即可。万一用到了BMP以外的字符,再使用4字节。这便是UTF-16。

由于UTF-16和UTF-32使用多个字节来存储一个数字(码点),所以都需要考虑字节序的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值