java采用unicode编码来处理字符。Java程序无论是从/往文件系统以字符流读/写文件,还是往URL连接写HTML信息,或从URL连接读取参数值,都会有字符编码的转换。编/解码过程如下图:
乱码产生的根本原因是由于编码和解码采用的不是同一种码(GBK,UTF-8,ISO8859-1)。
字符串(String或char[])"123你"经过编码后的字节流(unicode字节流)为31 00 32 00 33 00 60 4f。如果你用new String("123你".getBytes("iso8859-1"), "gbk")来创建这个字符串时就会产生乱码。
因为getBytes("iso8859-1")取得的是"123你"经过iso8859-1编码后的字节流31 32 33 3f (iso8859-1字节流),
而在用new String(bytes, "gbk")构造字符串时java会将iso8859-1字节流(31 32 33 3f)当作是unicode字节流(因为java是采用unicode来处理字符的,所以它把字节流统统当作是unicode字节流来处理),因此31 32 33 3f也被它看成了是unicode字节流。而unicode字节流(31 32 33 3f)经过gbk编码后当然是123?了。于是,乱码产生了。
l Javac是以系统默认编码(file.encoding系统属性)读入源文件,然后按Unicode进行编码的。
l 在JAVA运行的时候,JAVA也是采用Unicode编码的,为了高度利用内存空间提高效率对Unicode字符编码采用了UTF-8的方式编码,并且默认输入和输出的都是操作系统的默认编码。
l 也就是说在new String(bytes,encode)中,系统认为输入的是编码为encode的字节流,换句话说,如果按encode来翻译bytes才能得到正确的结果;而在new String(bytes)中采用的就是根据file.encoding系统属性读入的编码方式来进行编码,同样也必须根据系统默认的编码才能得到正确的结果,这个结果最后要在JAVA中保存,它还是要从这个encode转换成Unicode,因为在JAVA中各种字符均是以Unicode的形式来处理的。
l 也就是说有bytes-->encode字符-->Unicode字符的转换;而在String.getBytes([encode])中,系统要做一个Unicode字符-->encode字符-->bytes的转换。
出自:http://www.jdsyxx.net/oblog313/user1/2/archives/2010/3119.html
及:http://www.360doc.com/content/07/0507/20/17598_487208.shtml
分享到:
相关推荐
java中文乱码分析
深入剖析Java编程中的中文问题及建议最优解决方法
Java应用中的汉字乱码问题分析
解决JAVA编程中遇到的各种乱码问题,对乱码问题的分析
从编码角度分析了java编译后在控制台和web等终端显示乱码问题。
文《关于c++与java中文乱码问题分析与解决》中一个bug分析DionysosLai(906391500@qq.com) 2014/10/21 在前几篇一博客
阅读许多关于中文乱码的解决办法的博文后,发现对于该问题我们都(更加包括我自己)没有一个清晰明了的认识,于是LZ想通过这系列博文(估计只有几篇)来彻底分析、解决java中文乱码问题,如有错误之处望各位同仁指出...
java编码格式问题,对常见的java中文乱码作出分析及提出解决方案
主要为大家详细介绍了java实现PPT转PDF出现中文乱码问题的解决方法,进行了详细的问题分析,需要的朋友可以参考下
JavaWeb开发中的中文乱码问题分析及解决方案.docx
Java Web中文显示乱码问题的分析与解决方案
java编码中的中文问题是一个老生常谈的问题了,但一直没有一个清晰的解释,本文作者将通过《java 中文乱码 解决之道》彻底分析、解决java中文乱码问题。
根据自己平时遇到的问题,以及根据资源,总结出了所有中文乱码问题,包括乱码问题的方式,分析乱码原因,以及给出几种乱码解决办法,基本上解决所有乱码问题,简单易懂,有截图。
乱码透析
在java中经常会遇到中文乱码问题,该问题很好的分析描述了该问题...............
在进行java Web开发的过程中,由于采用的编码和解码的方式不统一,经常会出现乱码问题。文中首先介绍了java Web的编码机制及JSP运行原理,继而阐述了在开发过程中常见的乱码问题及解决方案,最后提出采用过滤器重写...
在这里碰到的问题是:调用java.net.URLEncoder的encode()方法时,如果没有显示指定字符集参数,那么URLEncoder会使用默认字符集。这个默认字符集在Eclipse里跑main()方法和在Tomcat里跑Web应用,得到的结果不一样,...
在利用JSP/Servlet技术开发java Web应用程序的时候,经常会遇到中文乱码问题,本文首先介绍了Web应用中常见的编码方式,然后分析了J2EE平台下Web应用中文乱码产生的原因,并针对不同情况给出了解决方法。
字符与字节之间的转换是通过查码表完成的,将字符转成字节的过程称为编码,将字节转换成字符的过程称为解码,如果编码和解码使用的码表不一致,就会导致乱码问题。通过本案例来解决中文输出乱码问题。 使用...
主要介绍了Java避免UTF-8的csv文件打开中文出现乱码的方法,结合实例形式分析了java操作csv文件时使用utf-16le编码与utf8编码相关操作技巧,需要的朋友可以参考下