乱码的原因
2016-07-26 09:45
281 查看
乱码出现的原因:
乱码出现实际是使用错误的解码方式,像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
当然这个标和非标只是我理解出来的一个概念
乱码出现实际是使用错误的解码方式,像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
当然这个标和非标只是我理解出来的一个概念
相关文章推荐
- 二级域名原理以及程序
- Orace查询数据出现乱码的问题解决思路
- oracle em 按钮乱码解决办法及em网页变成英文
- C#读取中文文件出现乱码的解决方法
- ASP编码必备的8条原则
- mysql命令提示行连接乱码的解决
- 解决Java程序使用MySQL时返回参数为乱码的示例教程
- C# 判断字符为空的6种方法的效率实测对比
- C#实现移除字符串末尾指定字符的方法
- XML指南——XML编码
- C#中字符串编码处理
- ExtJS中文乱码之GBK格式编码解决方案及代码
- 一根网线内的8根线哪4根是传输数据的,哪四根是防干扰的
- 程序员趣味读物 谈谈Unicode编码
- 文本文件编码方式区别
- Jquery乱码的一次解决过程 图解教程
- TCP三次握手及原理
- jQuery中的pushStack实现原理和应用实例
- C语言中字符的输入输出以及计算字符个数的方法详解
- sqlserver索引的原理及索引建立的注意事项小结