乱码出现的原因:
乱码出现实际是使用错误的解码方式,像UTF-8中的
中国,总占六个字节,(UTF8中一个汉字占三个字节)
却用GBK的解码方式去解,GBK的中国只占四个字节,(GBK中一个汉字占两个字节)
解码的动作变这样,错误可想而知
下面的一个1代表一个字节
111 111 --》 11 11 11
字节状态的汉字和内存中的汉字应该是不同的
内存中的汉字已经是汉字了(或者说是char类型),它可以以任何编码输出
字节状态中的汉字只能以固定的编码解析
为什么以GBK为编码的中国在控制台会乱码呢,因为控制台设置的是utf-8,以utf-8解GBK
11 11 -> 111 1??
同样代码中的一些中文注释也是这个道理,GBK被以UTF-8解码,自然乱了
标准字符和非标准字符(就是ascii和非ascii)
为什么abc等一些字符不会乱码呢,无论是utf-8转gbk,还是转iso8859-1都不会呢?
原来。。。
以utf-8来说,它们的最左边那位,好像是叫符号位的东东,都是0,而汉字却是1,以此区分
所有编码方式应该都是按这个标准执行的,所以abc之流,不会乱码,
不论是utf-8,gbk中的abc都只占一字节。
下面以二进制展示例子:
(非标准字符(以GBK为例))汉字 -> 1xxxxxxx 1xxxxxxx
(标准字符)abc之流 -> 0xxxxxxx
当然这个标和非标只是我理解出来的一个概念