- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
深入剖析Java 编程中的中文问题及建议最优解决方法
深入剖析 Java 编程中的中文问题及建议最优解决方法
Abstract:本文深入分析了 Java 程序设计中 Java 编译器对 java 源文件和 JVM 对 class 类文件的编码/解
码过程,通过此过程的解析透视出了Java编程中中文问题产生的根本原因,最后给出了建议的最优化的解
决Java中文问题的方法。
1、中文问题的来源
计算机最初的操作系统支持的编码是单字节的字符编码,于是,在计算机中一切处理程序最初都是以
单字节编码的英文为准进行处理。随着计算机的发展,为了适应世界其它民族的语言(当然包括我们的汉
字),人们提出了UNICODE编码,它采用双字节编码,兼容英文字符和其它民族的双字节字符编码,所以,
目前,大多数国际性的软件内部均采用 UNICODE 编码,在软件运行时,它获得本地支持系统(多数时间是
操作系统)默认支持的编码格式,然后再将软件内部的UNICODE转化为本地系统默认支持的格式显示出来。
Java的JDK 和 JVM即是如此,我这里说的JDK是指国际版的JDK,我们大多数程序员使用的是国际化的JDK
版本,以下所有的JDK均指国际化的JDK 版本。我们的汉字是双字节编码语言,为了能让计算机处理中文,
我们自己制定的gb2312、GBK、GBK2K等标准以适应计算机处理的需求。所以,大部分的操作系统为了适应
我们处理中文的需求,均定制有中文操作系统,它们采用的是GBK,GB2312 编码格式以正确显示我们的汉字。
如:中文 Win2K 默认采用的是 GBK 编码显示,在中文 WIN2k 中保存文件时默认采用的保存文件的编码格式
也是GBK的,即,所有在中文WIN2K中保存的文件它的内部编码默认均采用GBK编码,注意:GBK是在GB2312
基础上扩充来的。
由于 Java 语言内部采用 UNICODE 编码,所以在 JAVA 程序运行时,就存在着一个从 UNICODE 编码和对
应的操作系统及浏览器支持的编码格式转换输入、输出的问题,这个转换过程有着一系列的步骤,如果其
中任何一步出错,则显示出来的汉字就会出是乱码,这就是我们常见的JAVA中文问题。
同时,Java是一个跨平台的编程语言,也即我们编写的程序不仅能在中文windows上运行,也能在中
文 Linux 等系统上运行,同时也要求能在英文等系统上运行(我们经常看到有人把在中文 win2k 上编写的
JAVA程序,移植到英文Linux上运行)。这种移植操作也会带来中文问题。
还有,有人使用英文的操作系统和英文的IE等浏览器,来运行带中文字符的程序和浏览中文网页,它
们本身就不支持中文,也会带来中文问题。
有,几乎所有的浏览器默认在传递参数时都是以 UTF-8 编码格式来传递,而不是按中文编码传递,所
以,传递中文参数时也会有问题,从而带来乱码现象。
总之,以上几个方面是JAVA中的中文问题的主要来源,我们把以上原因造成的程序不能正确运行而产
生的问题称作:JAVA中文问题。
2、JAVA编码转换的详细过程
我们常见的JAVA程序包括以下类别:
*直接在console上运行的类(包括可视化界面的类)
*JSP代码类(注:JSP是Servlets类的变型)
*Servelets类
*EJB类
*其它不可以直接运行的支持类
这些类文件中,都有可能含有中文字符串,并且我们常用前三类JAVA程序和用户直接交互,用于输出
和输入字符,如:我们在 JSP 和 Servlet 中得到客户端送来的字符,这些字符也包括中文字符。无论这些
JAVA类的作用如何,这些JAVA程序的生命周期都是这样的:
*编程人员在一定的操作系统上选择一个合适的编辑软件来实现源程序代码并以.java扩展名保存在操
作系统中,例如我们在中文win2k中用记事本编辑一个java源程序;
*编程人员用JDK中的javac.exe来编译这些源代码,形成.class类(JSP文件是由容器调用JDK来编
译的);
*直接运行这些类或将这些类布署到WEB容器中去运行,并输出结果。
那么,在这些过程中,JDK和JVM是如何将这些文件如何编码和解码并运行的呢?
这里,我们以中文win2k操作系统为例说明JAVA类是如何来编码和被解码的。
第一步,我们在中文 win2k 中用编辑软件如记事本编写一个 Java 源程序文件(包括以上五类 JAVA 程
序),程序文件在保存时默认采用了操作系统
文档评论(0)