Java中文编码
问题研究
摘要:介绍了中文编码同Java的关系。根据Java
程序的运行原理,分析了Java单机程序、在服务器上运行的
JSP、
Servelets或EJB等与分布式Java程序产生中文乱码的原因,提出了相应的解决
方案。
关键词:Java;中文;编码格式;乱码
1问题描述
计算机最初的操作
系统支持的编码是单字节的字符编码,
在计算机中一切处理程序最初都是以单字节编码的英文为准
进行处理。为了适应世界其它民族的语言(当然包括汉字),人
们提出了UNICODE编码。它采用双字节编码,兼容英文字符和
其它民族的双字节字符编码,因此,目前大多数国际性的
软件 内部均采用UNICODE编码。在软件运行时,它获得本地支持系
统(多数时间是操作系统)默认支持的编码格式,然后再将软件
内部的UNICODE转化为本地系统默认支持的格式显示出来。
Java的JDK和JVM即是如此,这里说的JDK是指国际版的JDK,
大多数程序员使用的是国际化的JDK版本。汉字是双字节编码
语言,为了能让计算机处理中文,我国自己制定gb2312、GBK、
GBK2K等标准以适应计算机处理的需求。因此,大部分的操作
系统为了适应中文处理的需求,均定制有中文操作系统,它们
采用的是GBK,GB2312编码格式来正确显示汉字。
由于Java语言内部采用UNICODE编码,所以在Java程序运
行时,就存在着一个从UNICODE编码和对应的操作系统及浏
览器支持的编码格式转换、输入、输出的问题,这个转换过程有
着一系列的步骤,如果其中任何一步出错,则显示出来的汉字
就是乱码,这就是常见的Java中文问题。
2关键问题分析及解决方案
通常Java程序可以分为以下几个类型:
(1)直接在console上运行的单机程序(包括可视化界面的
类);
(2)在服务器上运行的JSP、Servlets或EJB等;
(3)分布式程序,客户端与服务运行于不同机器,而且语言
环境可能不一致;目前网管应用就属于此种情况。
以上这些类型的Java程序中,都有可能含有中文字符串,
并且经常需要与用户直接交互,用于输出和输入字符,这些字
符也包括中文字符。无论这些Java类的作用如何,这些Java程序
的生命周期都是这样的:
(1)编程人员在一定的操作系统上选择一个合适的编辑软
件来实现源程序代码并以.java扩展名保存在操作系统中;
(2)编程人员用JDK中的javac.exe来编译这些
源代码,形成.
class类(JSP文件是由容器调用JDK来编译的);
(3)直接运行这些类或将这些类布署到WEB容器中去运
行,并输出结果。
在程序运行过程中,JDK和JVM是按以下的步骤来完成编