关于字符集和字符编码的理解
什么是字符集
字符集就是众多字符的集合
是字符和二进制数字之间的映射关系集合
目前有以下几种流行的字符集:
- ASCII字符集——主要存储英文字母、数字以及一些标点符号
- GBK字符集——在ASCII字符集的基础上扩展了常用的汉字
- Unicode字符集——包罗万象,包含了世界上大部分字符
什么是字符编码
字符在计算机中是以二进制进行存储的,好多个字符连在一起形成一串长长的二进制串,要想从这串二进制数字中提取出字符,就需要使用对应的字符编码方式进行解码
ASCII字符编码
ASCII字符集一共有128个字符,二进制从00000000——01111111
所以如果字符以ASCII进行编码,只需要8个bit位即一个字节就足够了
ASCII编码方式就是将字符所对应的二进制串直接存储在计算机中
GBK字符编码
GBK是在ASCII字符集的基础上进行的扩展,为了兼容ASCII字符集,GBK字符集中的二进制从00000000——01111111依旧是和ASCII字符集一致,即一个字节表示一个字符
除此之外的汉字部分是用两个字节进行表示,比如“汉”这个字在GBK字符集中的二进制就是10111010 10111010
因为从00000000——01111111是ASCII的位置,所以汉字高字节的第一位一定是1,这也是GBK中区分英文和汉字的重要方式
GBK编码方式就是将字符所对应的二进制串直接存储在计算机中
如果在一串二进制中某个字节是以0开头,那么这个字节表示ASCII字符集的内容
若某个字节以1开头,那么这个字节连同下个字节共同表示一个汉字,就可以通过这两个字节在GBK字符集中查到对应的汉字展示到屏幕上
Unicode字符编码
Unicode是几乎包含了世界上所有字符的字符集
因为有的字符比如英文字母,只需要一个字节就可以表示,有的字符比如汉字就很多,需要多个字节才能表示,为了节省内存空间,有了以下几种主要的编码方式:
- utf-8
- utf-16
- utf-32
utf-8
在utf-8编码方式中,一个英文占一个字节,即和ASCII字符集相同,二进制从00000000——01111111
一个汉字占三个字节,比如“汉”这个字,在Unicode字符集中对应的二进制是11011000 1001001
utf-8编码会将这16个bit位按顺序放入到1110xxxx 10xxxxxx 10xxxxxx这三个字节的空位中,一共有16个bit的空位
“汉”对应的utf-8编码就是11100110 10110001 10001001,共计三个字节
utf-8编码中每个字节固定的几位就是解码的关键
utf-16
在utf-16编码方式中,一个字符占2-4个字节,高位补0
utf-32
在utf-32编码方式中,一个字符占4个字节,高位补0