ASCII
使用1个字节来存储,例如 01110101,因为该编码字符集总数为2的7次方即128个,所以第一位用不到,默认为0
GB2312
兼容ASCII编码,当ASCII表中包含该字符时,则使用1个字节来存储,当不包含时,则使用2个字节来存储,大概包含常用汉字和图形字符7000+个
GBK
全部使用2个字节来存储,占16位,扩展到了2万+个字符,后来在GBK基础上推出了gb18030,大概包含7W个字符,其中还包含了中日韩统一表意文字
UTF-8
1. 长度并不固定,ASCII表中的仍然占用1个字节,中文占用3个字节
2. 因为数据实际以0和1的方式存储,需要以一种编码方式来区分不同数据间的边界
例如:
当字符占用1个字节时,二进制首位为0,其余7位用来表示值
当字符占用2个字节时,第一个字节前3位为110,之后每个字节前两位都用10来关联
当字符占用3个字节时,第一个字节的前4位为1110,之后每个字节前两位都用10来关联
依次类推
3. 编码方式:每个字节都由标记位 + 数据位组成,如下表,红色为标记位,蓝色为数据位
字节数 | 第一字节 | 第二字节 | 第三字节 |
1字节 | 0xxxxxxx | ||
2字节 | 110xxxxx | 10xxxxxx | |
3字节 | 1110xxxx | 10xxxxxx | 10xxxxxx |
4. 转换方式:去掉标记为,将数据位连接起来,然后转成10进制,则为字符集中对应ID
字节数 | 第一字节 | 第二字节 | 第三字节 | 连接起来的2进制 (去掉标记位后的) | 十进制 |
2字节 | 11000100 | 10000010 | - | 00100000010 | 258 |
3字节 | 11100011 | 10000101 | 10001010 | 00011000101001010 | 12618 |