字符编码与解码


码点

每个字符对应的数字叫做码点

字符集

标准所支持的所有字符及其对应的码点的集合成为字符集

字符编码

字符 到 存储在计算机的内容 的映射叫做编码

ASCII编码 ,针对ASCII字符集编码,特点第一个bit位一定是0

UTF 是 Unicode Transformation Format的缩写,意为Unicode转换格式

UTF-32编码 针对Unicode编码, 就是直接把对应的码点直接以二进制存储在计算机里,每个字符 无论码点大小都是 4字节,前面补0

UTF-8 是针对Unicode的可变长度编码,用1到6个字节编码UNICODE字符, 兼容ASCII, 使码点小的字符相应需要更少的空间存储

码点和二进制存储规则, 二进制码点被分割后被存储,通过头字节(几个1表示几字节,如果是0就是1字节)可以知道各字符在内存中的长度

这种编码4字节已经可以表示200多万个字符,已经满足全球所有字符,并且收录了绘文字emoji字符

码点范围(10进制, 两头包含) 码点范围(二进制, 两头包含) 存储(二进制)
0-127 0zzzzzzz 0zzzzzzz
128-2047 00000yyy yyzzzzzz 110yyyyy 10zzzzzz
2048-65535 xxxxyyyy yyzzzzzz 1110xxxx 10yyyyyy 10zzzzzz
65536-1114111(2097151?) 000wwwxx xxxxyyyy yyzzzzzz 11110www 10xxxxxx 10yyyyyy 10zzzzzz
2^21 - 2^26-1 000000kk wwwwwwxx xxxxyyyy yyzzzzzz 111110kk 10wwwwww 10xxxxxx 10yyyyyy 10zzzzzz
2^26- 2^31-1 0vkkkkkk wwwwwwxx xxxxyyyy yyzzzzzz 1111110v 10kkkkkk 10wwwwww 10xxxxxx 10yyyyyy 10zzzzzz

ASCII

ASCII 美国信息交换标准代码

包含 数字,大小写字母, 常用英文符号和控制字符

码点为0-127

ASCII 字符集一共包含128个字符

二进制码点第一个为0,后面7bit位(2^7)刚好可以表示128种组合

Unicode

包含14万个字符(码点)

其他字符编码

大陆1981年制定GB2312, 对GB2312进行扩充的为GBK(收录了简繁体,日文,韩文等)编码

港澳台1984年流行使用Big5 大五码

乱码

锟斤拷

替换符号, 黑色菱形中一个白色问号

Unicode有个特殊的字符, 用于表示无法识别或展示的字符,

在UTF-8中的编码是3字节11101111 10111111 10111101

16进制为EF BF BD

其他字符编码在无法识别字符的情况下使用这个符号进行替换 用于提示用户

如果连续两个这样的符号出现,再用utf8编码 就变成EF BF BD EF BF BD

再用GBK编码 读取 就会是锟斤拷,因为GBK每个字符都是两字节, 对应的字符为EF BF 锟 BD EF 斤 BF BD 拷