编码与乱码
非Unicode编码
ASCLL
- 美国规定了128个字符的二进制表示方法。计算机最小存储单位是byte,即8位。ASCII码最高位设置为0,其余7位表示字符,可看作0~127
ISO 8859-1 && Windows-1251
- ISO 8859-1标准更早,使用更为广泛的是Windows-1521,基本相同,区别在于数字128~159中增加了可打印字符。很多啊应用程序中声明采用“ISO 8859-1”但解析是成就当做“Windows-1521”编码
GB2312
- GB2313使用两个字节表示汉字。
- 高位字节范围是0xA1~0xF7。[1016+1 , 1516+7] 即 [161,247] == [128+33, 247]
- 低位字节范围是0xA1~0xFE。[161,254] == [128 + 33, 254]
- 两个字节中,最高位都是1,如果是0,就认为是ASCII字符
GBK
- GBK建立在GB2312基础上,向下兼容GB2312。GB3212编码的字符和二进制表示,在GBK编码里是完全一样的。
- GBK同样使用两个字节表示
- 高位字节范围0x81~0xFE [129,254]
- 低位字节范围是0x40~0x7E和0x80 ~0xFE [64,126]和[128, 254]
- 注:低位字节从0x40(64)开始的,即低位字节的最高位可能是0,在解析时,如果第一个字节最高位为1,那么就将下一个字节读进来一起解析为汉字
GB18030
- GB18030向下兼容GBK
- 使用变长编码,有的字符两个字节吗,有的四个字节。
- 两字节编码中字节表示范围与GBK相同。
- 四字节编码中
- 第一个字节的值为0x81 ~ 0xFE,第二个字节的值为0x30 ~ 0x39,第三个字节的值为0x81~0xFE,第四个字节的值为0x30 ~ 0x39。、
- 在解析时,如果第二个字节的范围是0x30 ~ 0x39就代表该值用四个字节表示,因为两个字节编码中第二个字节都比这个大。
Big5
- Big5是针对繁体中文的,高位字节范围是0X81 ~ 0xFE,低位字节范围是0x40 ~ 0x7E 和 0xA1 ~ 0xFE
Unicode编码
- Unicode给世界上所有字符都分配了一个唯一的数字编号