日志文章

2007年08月30日 17:39:47

编码

Java 源代码-> Java 字节码-> ;虚拟机->操作系统->显示设备     http://www-128.ibm.com/developerworks/cn/java/java_chinese/index.html


http://blog.matrix.org.cn/page/eoeac?catname=%2FGeneral 识别UTF-8
http://topic.csdn.net/t/20011229/21/449546.html


http://www.chedong.com/tech/unicode_java.html
Java对输入输入首先有一个字节流字符流之间的编码/解码过程,这个设置是根据系统配置决定的,为什么PHP之类的应用很少有字符集问题而Java有很好的国际化机制,却经常出现乱码问题呢?
简单的举例:
有一个包含你好2个中文字的文件实际上是4个字节组成的:C4 E3 BA C3
在英文操作系统中缺省的编码解码方式是缺省编码方式是ISO8859,所以直接从文件中读取的结果是4个的字节,按ISO8859解码后在程序中操作的是4Java字符,虽然每个JAVA字符是16Unicode,但每个字符仍是8位字节的映射\u00C4\u00E3\u00BA\u00C3,因此处理的仍是英文。而显示过程中,是浏览器将字节流正确的显示成了相应的中文。
而一个Java应用在GBK编码方式的操作系统中,直接从文件中读取4个的字节后,按GBK方式解码后是216位的Java字符\u4F60\u597D,每个字都是相应UnicodeCJK区块所对应的中文。
更多的例子请参考:Java的中文处理学习笔记
这也就是为什么在php等应用很少出字符集问题的原因:在服务器端环境缺省一般是英文(ISO8859-1),等于全部处理使用的都是按字节方式处理的。数据输入输出过程中编码方式完全不被改动,因此乱码问题很少出现。而Java实际上提供了把每个中文直接当成1而不是2个字节处理的机制,主要的乱码问题往往是输入输出时编码解码方式不一致造成的。而且通过Unicode机制,程序除了实现程序界面根据本地化的适应外,甚至程序处理的内容本身的在不同字符集的操作系统中也是可以通用的,比如:在繁体中文操作系统中编辑的内容,在简体中文操作系统中也能正常的查询。以下例子可能更说明问题:

Tags: JAVA  

类别: 字符编码 |  评论(0) |  浏览(610) |  收藏
发表评论
看不清楚,换一张