`
wusuoya
  • 浏览: 629817 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

java中文乱码

    博客分类:
  • Java
 
阅读更多

过程分析:
第一步:java文件编码格式
    文件格式非固定:
     Java文件在编写之前需要指定文件的编码格式,默认编码和当前操作系统平台编码保持一致。比如,当前操作系统平台为windows中文版,那么编码一般为GBK。当然可以对保存文件的编码进行修改。例如修改成UTF-8。那么此时文件保存的编码就为UTF-8。

第二步:java文件编写保存
  
编写完成之后,那么则以第一步的编码进行保存。当前java文件中的所有字符串则以第一步中的编码得以保存。比如说当前java文件中有 String str=”abc中国”;第一步的编码设置为UTF-8,那么则以UTF-8进行保存。如果是GBK,那么则以GBK进行保存。
    第三步:编译成Class
  
   编译后的class文件的编码固定为UTF-8;和java文件编码格式无关。说明,编译器在编译的过程中将文件格式做了处理。编译器的这种处理操作不会带来乱码问题,因为我们必须要相信编译器的编解码处理过程。

    第四步:Load class 文件到jvm
   jvm中的所有字符串编码都为unicode。所以的话,从class文件再到jvm。编码又做了一次处理。同样也必须相信这种处理不会为乱码留下伏笔;

    第五步:内存
   内存中运行的是jvm中的数据,jvm中的数据编码为unicode。那么内存中同样也以unicode方式进行存储。但是有一个问题,内存运行的过程中,可能会设计到读取文件内容、网络内容以及输出这些内容的操作。在内存中读取的网络内容、文件内容会以不同的编码出现。这种编码和java文件中处理的方式有关。这儿是乱码问题出现原因的一部分。内存中还有输出字符串内容到文件的操作。这儿也会存在问题。

 

我们在java代码中常常将中文转换成Unicode,作为通用字符,这样第一步无论默认是什么编码都不会乱码了(目前验证是这样,Unicode原理待研究)

还可参考:
http://1035054540-qq-com.iteye.com/blog/1856060

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics