Java 编程中中文乱码问题的研究及解决方案
0 引言
Java 最大的特性是与平台的无关性及开发环境的多样性。字符串被 Java 应用程
序转化之前,是根据操作系统默认的编码方式编码。Java 语言内部采用 Unicode 编码,
它是定长双字节编码,即任何符号都用两个字节表示。在 Java 程序运行时,就有一个
从 Unicode 编码到对应操作系统及浏览器支持的编码格式转换问题,若此过程有一步
不对就会出现中文乱码的问题。
1 Java Web 开发中文乱码问题及解决方法
出现乱码三种主要情况是:页面显示乱码、用户提交的数据是乱码、数据库中
的数据是乱码。下面就这三种情况讨论其解决的方案,其支持的环境是 J2EE5.0,服务
器为 Tomcat5.5.16,数据库为 MYSQL5.0。
1.1 页面显示乱码
页面上显示乱码的现象是:当访问某个 JSP 或者 Servlet 产生的页面的时候,页面
上本来应该显示中文信息的地方变成乱码。
这时首先要分析乱码的来源。乱码的来源可能有两种情况 ,一种是浏览器显示
不正确,另一种情况是后台在动态生成页面的时候,其内容就是乱码。所以,首先要做
的是查看页面的源文件,看看里面的中文到底是不是乱码。如果不是乱码,那么说明
是浏览器没有正确地解析页面的编码,否则是由于后台处理造成的。
对于第一种情况,只需要设置 JSP 或者 Servlet 的 contentType 属性即可。对于 JSP
中的设置使用的是 page 指令,将其代码设置为:
对于 Servlet 生成的页面,需要在输出页面之前调用 response 的 setContentType()
方法。其代码形式如下:
response.setContentType("text/html;charset=gb2312");
另外,在所生成的 HTML 文件的头部最好加入下面的内容:
若页面本身的内容就是乱码这种情况,一般只出现在动态生成内容的那一部分。
要通过源代码进一步地查找乱码产生的根源。这时数据的来源也有两种情况 ,一种
是从数据库中取出来的数据,另一种是接收的来自页面提交的数据。下面分别进行
分析和处理。
1.2 用户提交的数据是乱码
这种情况的表现是通过 request(用户请求)对象取得用户提交的中文信息后,输
出到控制台后是乱码。这种情况的原因在于 request 对浏览器提交的数据的解码方
式不正确。可以单独采用 request 的 setCharacterEnco
ding()方法进行处理,但如果页面众多,每个都进行处理会很麻烦。这里,可以通过
Filter(过滤器)将所有的 request 的编码都进行设置。
下列程序代码就是用来设置 request 编码的 Filter。
public void doFilter(ServletRequest request,ServletResponse response, FilterChain
chain)
throwsIOExcep8on,ServletExcep8on
{