JAVA编码转换的详细过程

我们常见的JAVA程序包括以下类别: 
       *直接在console上运行的类(包括可视化界面的类) 
       *JSP代码类(注:JSP是Servlets类的变型) 
       *Servlets类 
       *EJB类 
       *其它不可以直接运行的支持类 

这些类文件中,都有可能含有中文字符串,并且我们常用前三类JAVA程序和用户直接交互,用于输出和输入字符,如:我们在JSP和Servlet中得到客户端送来的字符,这些字符也包括中文字符。

无论这些JAVA类的作用如何,这些JAVA程序的生命周期都是这样的: 

  • 编程人员实现源程序代码并以.java扩展名保存在操作系统中,例如我们在中文win2k中用记事本编辑一个java源程序; 
  • 编程人员用JDK中的javac.exe来编译这些源代码,形成.class类(JSP文件是由容器调用JDK来编译的); 
  • 直接运行这些类或将这些类布署到WEB容器中去运行,并输出结果。 

      那么,在这些过程中,JDK和JVM是如何将这些文件如何编码和解码并运行的呢? 
      这里,我们以中文win2k操作系统为例说明JAVA类是如何来编码和被解码的。 
     第一步,在win2k中用编辑软件如记事本编写一个Java源程序文件,程序文件在保存时默认采用了操作系统默认支持GBK编码格式形成了一个.java文件,要查看系统的file.encoding参数,可以用以下代码: 
public class ShowSystemDefaultEncoding { 
    public static void main(String[] args) { 
        String encoding = System.getProperty("file.encoding"); 
        System.out.println(encoding); 
    }
} 

      第二步,用JDK的javac.exe文件编译Java源程序,由于JDK是国际版的,在编译的时候,如果我们没有用-encoding参数指定我们的JAVA源程序的编码格式,则javac.exe首先获得我们操作系统默认采用的编码格式(操作系统的file.encoding参数),然后JDK把java源程序从file.encoding编码格式转化为JAVA内部默认的UNICODE格式放入内存中。紧接着,JDK将此以UNICODE编码的编译后的class文件保存到我们的操作系统中形成我们见到的.class文件。我们最终获得的.class文件是内容以UNICODE编码格式保存的类文件,它内部包含我们源程序中的中文字符串,只不过此时它己经由file.encoding格式转化为UNICODE格式了。
      第三步, 运行该类。首先需要JVM支持,即操作系统中必须安装有JRE。运行过程:首先java启动JVM,JVM读取class文件并把内容读入内存中,此时内存中为UNICODE格式的class类,然后JVM运行它,如果此时此类需要接收用户输入,则类会默认用file.encoding编码格式对用户输入的串进行编码并转化为unicode保存入内存(用户可以设置输入流的编码格式)。程序运行后,产生的字符串(UNICODE编码的)再回交给JVM,最后JRE把此字符串再转化为file.encoding格式(用户可以设置输出流的编码格式)传递给操作系统显示接口并输出到界面上。以上每一步的转化都需要正确的编码格式转化,才能最终不出现乱码现象。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值