乱码的原因

乱码出现的原因:
乱码出现实际是使用错误的解码方式,像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

当然这个标和非标只是我理解出来的一个概念
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值