0x01 字符与字节
肉眼看到的一个文字或符号单元就是一个单元(包括乱码),一个字符可能对应1~n字节,1字节为8位,每一位要么是1,要么是0
0x02 字符集
一个字符对应1~n字节是由字符集与编码决定的,比如,ASCII字符集就是一个字符对应1字节,不过1字节只用了7位,最高位用于其他目的,所以ASCII字符集共有2的7次方(128)个字符。
0x03 字符集编码
一般字符集对应一种编码方式(比如GBK字符集对应了GBK编码),不过Unicode字符集的编码方式有UTF-8、UTF-7、UTF-16、URF-32。
编码的目的是最终将这些字符正确的转换为计算机可理解的二进制,对应的解码就是将二进制最终解码为人类可读的字符。
0x04 宽字节编码
GB2312、GBK、GB18030、BIG5等就是常说的宽字节,就是只有两字节。宽字节的问题主要是吃ASCII字符(一字节),比如,当字符集为GBK的时候,GBK编码第一字节(高字节)的范围0x81~0xFE,第二字节(低字节)的范围0x40~0xFE,这样的十六进制表示。而\符号的十六进制表示为0x5c,正好在GBK的低字节,如果之前有一个高字节,那么正好会被组成一个合法字符
GB2312是被GBK兼容的,它的高位是0xA1~0xF7,低位是0xA1~0xFE,但是在浏览器中处理行为同GBK,可能是浏览器兼容了,把GB2312统一按GBK处理。