Java编程中的中文问题
10页1、深入剖析 Java 编程中的中文问题及建议最优解决方法 Abstract :本文深入分析了Java 程序设计中Java 编译器对 java 源文件和 JVM对 class 类文件的编码 /解码过程, 通过此过程的解析透视出了Java 编程中中文问题产生的根本原因,最后给出了建议的最优化的解决 Java 中文问题的方法。 1、中文问题的来源 计算机最初的操作系统支持的编码是单字节的字符编码,于是,在计算机中一切处理程序最初都是以单字节编码的英文为准进行处理。随着计算机的发展,为了适应世界其它民族的语言(当然包括我们的汉字) ,人们提出了UNICODE 编码,它采用双字节编码,兼容英文字符和其它民族的双字节字符编码,所以,目前,大多数国际性的软件内部均采用UNICODE 编码,在软件运行时,它获得本地支持系统(多数时间是操作系统) 默认支持的编码格式,然后再将软件内部的UNICODE 转化为本地系统默认支持的格式显示出来。Java 的 JDK和 JVM即是如此, 我这里说的JDK是指国际版的JDK ,我们大多数程序员使用的是国际化的JDK版本,以下所有的JDK均指国际化的JDK版本。 我们
2、的汉字是双字节编码语言,为了能让计算机处理中文,我们自己制定的gb2312、GBK 、GBK2K等标准以适应计算机处理的需求。所以,大部分的操作系统为了适应我们处理中文的需求, 均定制有中文操作系统, 它们采用的是GBK,GB2312 编码格式以正确显示我们的汉字。如:中文 Win2K 默认采用的是GBK编码显示,在中文WIN2k中保存文件时默认采用的保存文件的编码格式也是 GBK 的, 即, 所有在中文WIN2K中保存的文件它的内部编码默认均采用GBK编码,注意:GBK 是在 GB2312基础上扩充来的。 由于 Java 语言内部采用UNICODE 编码,所以在JAVA程序运行时,就存在着一个从UNICODE 编码和对应的操作系统及浏览器支持的编码格式转换输入、输出的问题,这个转换过程有着一系列的步骤,如果其中任何一步出错,则显示出来的汉字就会出是乱码,这就是我们常见的JAVA中文问题。 同时,Java 是一个跨平台的编程语言,也即我们编写的程序不仅能在中文windows 上运行,也能在中文 Linux 等系统上运行,同时也要求能在英文等系统上运行(我们经常看到有人把在中文win2k
3、 上编写的JAVA程序,移植到英文Linux 上运行)。这种移植操作也会带来中文问题。 还有, 有人使用英文的操作系统和英文的IE 等浏览器, 来运行带中文字符的程序和浏览中文网页,它们本身就不支持中文,也会带来中文问题。 有,几乎所有的浏览器默认在传递参数时都是以UTF-8 编码格式来传递,而不是按中文编码传递,所以,传递中文参数时也会有问题,从而带来乱码现象。 总之, 以上几个方面是JAVA中的中文问题的主要来源,我们把以上原因造成的程序不能正确运行而产生的问题称作: JAVA 中文问题。 2、JAVA 编码转换的详细过程 我们常见的JAVA程序包括以下类别: *直接在console 上运行的类 (包括可视化界面的类 ) *JSP代码类(注: JSP 是 Servlets类的变型) *Servelets类 *EJB类 *其它不可以直接运行的支持类 这些类文件中,都有可能含有中文字符串,并且我们常用前三类JAVA程序和用户直接交互,用于输出和输入字符,如:我们在JSP和 Servlet中得到客户端送来的字符,这些字符也包括中文字符。无论这些JAVA类的作用如何,这些JAVA程序的生命
4、周期都是这样的: *编程人员在一定的操作系统上选择一个合适的编辑软件来实现源程序代码并以.java扩展名保存在操作系统中,例如我们在中文win2k 中用记事本编辑一个java 源程序; *编程人员用JDK中的 javac.exe来编译这些源代码, 形成.class类(JSP 文件是由容器调用JDK来编译的); *直接运行这些类或将这些类布署到WEB 容器中去运行,并输出结果。 那么,在这些过程中, JDK 和 JVM是如何将这些文件如何编码和解码并运行的呢? 这里,我们以中文win2k 操作系统为例说明JAVA类是如何来编码和被解码的。 第一步,我们在中文win2k 中用编辑软件如记事本编写一个Java 源程序文件 (包括以上五类JAVA程序),程序文件在保存时默认采用了操作系统默认支持GBK编码格式 (操作系统默认支持的格式为file.encoding格式)形成了一个 .java文件,也即, java程序在被编译前,我们的JAVA源程序文件是采用操作系统默认支持的file.encoding编码格式保存的, java 源程序中含有中文信息字符和英文程序代码;要查看系统的file.enc
5、oding参数,可以用以下代码: 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首先获得我们操作系统默认采用的编码格式,也即在编译java 程序时,若我们不指定源程序文件的编码格式,JDK首先获得操作系统的 file.encoding参数(它保存的就是操作系统默认的编码格式,如WIN2k ,它的值为GBK) ,然后 JDK就把我们的java 源程序从 file.encoding编码格式转化为JAVA内部默认的UNICODE 格式放入内存中。然后,javac把转换后的 unicode 格式的文件进行编译成 .cl
《Java编程中的中文问题》由会员海****n分享,可在线阅读,更多相关《Java编程中的中文问题》请在金锄头文库上搜索。
06~07(2)大学物理A期末试卷A
2007-2008大学物理A卷
2003-2004学年学生对大学物理与大学物理实验
08年湖南省大学物理竞赛试卷
2006级大学物理(I)期末试卷A卷
CorelDRAW测试题
数据库access+2003(上机试题)(备用)
java课程设计练习题
java试题练习(第1套)
C语言编程试题及答案
C语言程序设计期末试题C
大学物理实验_单项选择题
攀枝花学院大学物理第11章题库答案(最新修改)
《大学物理I、II》模拟试题(3)
2010-01大学物理(上)期中试题(64)
大学物理习题集答案5-6
网站制作常见问题
JAVA笔试100试题1
小型汽车C1C2C3驾照试题
大学物理2——热学习题
2023-08-28 32页
2023-08-14 14页
2023-05-06 1页
2022-09-13 53页
2022-06-04 1页
2022-06-04 3页
2022-06-04 6页
2022-05-20 10页
2022-04-05 14页
2021-12-16 20页