字符和码值的对应关系是通过字符编码表来决定的
ASCII码
标准ASCII码使用7 位二进制数来表示所有的大写和小写字母,数字 0 到 9、标点符号, 以及在美式英语中使用的特殊控制字符。一共可以表示128种字符。
Unicode字符集
Unicode是国际组织制定的旨在容纳全球所有字符的编码方案。
在Unicode中,字母、数字、汉字都是使用2个字节来表示的。
Unicode字符集对所有字符进行了编号,但是并没有指定这些编号的编码规则。
在Unicode中,汉字“中”的编号是:0x4e2d,“国”的编号是:0x56fd,对于“0x4e2d”,将其转换为对应的二进制数值为01001110 00101101,如果说把这样的数据直接存入计算机中,那么在我们从计算机中读取信息的时候,我们是没有办法知道一个字节是一个单独的字符还是和后面的字节联合组成一个字符,由此,便出现了Unicode字符集的实现方式,UTF-8是较为常用的一种。
UTF-8
UTF-8是Unicode字符集的一种编码实现方式,是一种可变长度的字符编码,也是目前使用最广泛的Unicode实现方式。
编码方式
00-7F: 0xxxxxxx
80-7FF: 110xxxxx 10xxxxxx
800-FFFF: 1110xxxx 10xxxxxx 10xxxxxx
10000-10FFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
解读:
如果Unicode的编码在是00-7F范围内的,那么就用一个字节来存储,第一位是0;
如果是在80-7FF范围内的,那么用两个字节来存储,第一个字节的前三位是110,另一个字节的前两位是10;
如果是在800-FFFF范围内的,那么用三个字节来存储,第一个字节的前四位是1110,剩下的字节的前两位是10;
如果是在10000-10FFFF范围内的,那么用四个字节来存储,第一个字节的前五位是11110,剩下的字节的前两位是10;
举个例子:
比如说汉字“中”的编码是0x4e2d,是在800-FFFF范围内的,那么就用三个字节来存储
0x4e2d转换为二进制就是01001110 00101101,将它填充到1110xxxx 10xxxxxx 10xxxxxx中,如下图
经过UTF-8编码得到的是11100100 10111000 10101101,转换为十六进制就是e4 b8 ad
利用在线工具对e4 b8 ad进行解码,得到汉字“中”
GBK
GBK编码,是对GB2312编码的扩展。
GBK编码采用双字节编码方案,其编码范围:8140-FEFE。
GB2312
中文字符集
编码范围比GBK要小。
ANSI
ANSI并不是某一种特定的字符编码,而是在不同的系统中ANSI表示不同的编码,中文系统中的ANSI编码是GBK编码,美国的系统中的ANSI编码其实是ASCII码。