乱码问题原理分析
来源:互联网 发布:远程服务器监控软件 编辑:程序博客网 时间:2024/05/17 23:31
中文乱码问题的由来
在计算机中,只有二进制的数据,不管数据是在内存中,还是在外部存储设备上。对于我们所看到的字符,也是以二进制数据的形式存在的。不同的字符对应二进制的规则就是字符编码。字符编码的集合称为字符集。
常用的字符集简介
ASCII字符编码集是较早出现的字符编码集合,它使用一个字节来表示256种不同的字符。ASCII字符集是如今最通用的单字节编码系统。
ISO-8859-1(同ISO8859-1)字符编码集的诞生弥补了ASCII字符集编码数量不足以涵盖其他语言所需字符的缺点,ISO-8859-1通常也叫Latin-1,Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符,其中0~127的字符与ASCII字符集相同。
GB2312字符编码集。是由我国发布的关于简化汉字的编码,通行于中国大陆和新加坡,简称国标码。鉴于中文字符数量之多,故采用两个字节来表示一个字符,分别称为高位和低位。为了和ASCII码有区别,中文字符的每一个字节的最高位都用1来表示。GB2312字符集是几乎所有的中文系统和国际化软件都支持的中文字符集
GBK字符编码集。完全兼容GB2312字符编码集,并且还对一些繁体中文,一些不常用的汉字和许多字符进行了编码。它也是现阶段Windows和其他一些中文操作系统的默认字符集,但并不是所有的国际化软件都支持该字符集,不过要注意的是GBK并不是国家标准,它只是规范。
Unicode字符编码集。为了统一全世界的字符编码,由Unicode协会指定并发布了Unicode编码。Unicode使用0~65535的双字节无符号数对每一个字符进行编码。其中的0~255的字符与ISO-8859-1中的一致。
UTF-8字符编码集。由于采用Unicode字符编码,一个英文字符要占用两个字节,在Internet上,大多数的信息都是用英文来表示的,如果都采用Unicode编码,将会使数据量增加一倍,为了减少存储和传输英文字符数据的数据量,可以采用UTF-8编码集。对常用的字符,即0~127的ASCII码,UTF-8用一个字节来表示,这意味着只包含7位的ASCII字符的字符数据在ASCII和UTF-8两种编码方式下是一样的。
注意:在UTF-8编码的多字节串中,第一个字节开头“1”的数目就是整个串中字节的数目。
对乱码产生过程的分析
为了实现java编写的程序一次编写到处运行,java内部采用Unicode字符集编码来表示字符。因此,在java语言中,不同字符集编码的转换,都是通过Unicode作为中介来完成的.
当从Unicode编码向某个字符集转换时,如果该字符集中没有对应的编码,则得到0x3f(即?字符)。这就是为什么有时候我们输入的是中文,在输出是却变成了问号。
当从其他字符集向Unicode编码转换时,如果这个二进制数在该字符集中没有标识任何的字符,则得到的结果是0xfffd。例如,一个GBK的编码值0x8140,从GB2312向Unicode转换,然而由于0x8140不在GB2312的字符集的编码范围(0xa1a1-0xfefe),当然也就没有对应任何的字符,所以转换后会得到0xfffd。
注意:浏览器会根据本地系统默认的字符集提交数据,而web容器默认采用ISO-8859-1的编码方式解析POST数据,另外JDBC驱动程序多数也采用ISO-8859-1的编码方式,.Class字节码文件是通过UTF-8编码的。
- 乱码问题原理分析
- MySQL中乱码原理分析
- Msql乱码问题分析
- 乱码问题分析(转)
- JAVA乱码问题分析
- JAVA乱码问题分析
- 中文乱码问题分析
- 中文乱码问题分析
- Servlet运行原理,乱码问题
- web-harvest页面编码识别的解决方法,及原理分析,以及中文乱码的问题
- MySQL乱码问题深层分析
- mysql字符乱码问题分析
- python 中文乱码问题分析
- web乱码问题详细分析
- Mysql中文乱码问题分析
- 中文乱码问题原理及解决方案
- 中文乱码问题原理及解决方案
- Python中文乱码问题原理解释
- Box2d源码学习<二>内存管理之SOA的实现
- Java 理论与实践: 非阻塞算法简介
- vim文件间复制粘贴完美方案
- Java语言实现简单FTP软件------>上传下载管理模块的实现(十一)
- Java Web学习笔记(八)
- 乱码问题原理分析
- 这是我的第一篇博客
- Javax.comm简介
- Java jdbc数据库连接池总结!
- DateGridew导出Excel表+常见错误提示
- LeetCode-Binary Tree Zigzag Level Order Traversal
- HDU-4627-The Unsolvable Problem
- cglib和asm相关的文章
- 【stagefrightplayer】1 调用过程