乱码的原因

来源:互联网 发布:斗鱼tv直播软件 编辑:程序博客网 时间:2024/05/04 03:40
乱码出现的原因:
乱码出现实际是使用错误的解码方式,像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

当然这个标和非标只是我理解出来的一个概念
0 0