对字符串编码进行汇总和区别
编码的由来:
计算机自己能理解的“语言”是二进制数,最小的信息标识是二进制数,8个二进制位表示一个字节;而我们人类所能理解的语言文字则是一套由英文字母、汉语汉字、标点符号字符、阿拉伯数字等等很多的字符构成的字符集。如果要让计算机来按照人类的意愿进行工作,则必须把人类所使用的这些字符集转换为计算机所能理解的二进制码,这个过程就是编码,他的逆过程称为解码。
最开始计算机在美国发明使用,需要编码的字符集并不是很大,无外乎英文字母、数字和一些简单的标点符号,因此采用了一种单字节编码系统。在这套编码规则中,人们将所需字符集中的字符一一映射到128个二进制数上,这128个二进制数是最高位为0,利用剩余低7位组成0000000001111111(0X000X7F)。0X00到0X1F共32个二进制数来对控制字符或通信专用字符(如LF换行、DEL删除、BS退格)编码,0X20到0X7F共96个二进制数来对阿拉伯数字、英文字母大小写和下划线、括号等符号进行编码。将这套字符集映射到0X00~0X7F二进制码的过程就称为基础ASCII编码,通过这个编码过程,计算机就将人类的语言转化为自己的语言存储了起来,反之从磁盘中读取二级制数并转化为字母数字等字符以供显示的过程就是解码了。
随着计算机被迅速推广使用,欧洲的非英语国家的人们发现这套由美国人设计的字符集不够用了,比如一些带重音的字符、希腊字母等都不在这个字符集中,于是扩充了ASCII编码规则,将原本为0的最高位改为1,因此扩展出了1000000011111111(0X800XFF)这128个二进制数。
因为计算机计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。所以才要有编码的存在。
最早的计算机在设计时采用8个比特(bit)作为一个字节,所以,一个字节能表示的最大的整数就是256(二进制11111111=十进制255),如果要表示更大的整数,就必须更多的字节。比如两个字节可以表示的最大整数时65535,4个字节可以表示的最大整数时4294967295。
ASCII编码:
由于计算机是美国人发明的,因此,最早只有127个字符被编进计算机里,也就是大小写英文字母、数字和一些符号,这个编码被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122。(这是十进制对应的ASCII码,如下图)
二进制/十进制对应的ASCII码:
GB系列:
中国国家标准总局发布了一套《信息交换用汉字编码字符集》的国家标准,其标准号就是GB2312-1980,再后来生僻字、繁体字及日韩字也被纳入字符集,就又有了后来的GBK字符集及相应的编码规范,GBK编码规范也是向下兼容GBK2312的。
Unicode: