Java,Web开发中文乱码问题的研究与解决

时间:2023-06-07 20:54:03 公文范文 来源:网友投稿

摘要:在利用Servlet/JSP技术开发Java Web应用程序的时候,不可避免的会遇到中文乱码问题,本文首先介绍了Web应用中常用的编码方式,然后分析了J2EE平台下Web应用中文乱码问题产生的原因,并在此基础上针对不同情况提出了解决方案。

关键词: Java Web开发;中文乱码;字符编码

中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)01-0062-02

Research and Solution of Chinese Garbled in Java Web Programming

LI Xiang,HAO Jing-jing

(Software College of Kaifeng University, Kaifeng 475004, China)

Abstract: In the use of Servlet/ JSP technology to develop Java Web application, will inevitably encounter the problem of Chinese characters encoding, this paper introduces the encoding mode in application of Web, and then analyses the causes of Chinese garbled on the J2EE platform Web application, and gives each case of the solution.

Key words: Java Web developing; Chinese garbled; character encoding

在Java Web应用开发中,经常会出现页面中本该显示中文的地方却是乱码的情况。究其原因,主要是由于在Web组件之间、或Web组件与浏览器、与数据库所使用的字符集标准不统一,Web应用程序运行过程中,中文字符往往需要在不同的字符集之间来回转换,这就导致了中文乱码问题的频繁出现。本文从Web应用的常用编码出发,详细讨论Java Web应用开发中出现中文乱码的原因以及解决办法。本文讨论的环境是基于JDK5.0,服务器为Tomcat5.5,数据库为MySQL 5.0。

1 Web应用的常用编码

Web应用中常用的编码主要有ISO8859-1,GB2312,GBK,Unicode和UTF- 8。

1.1 ISO8859-1

ISO8859-1,是国际标准化组织内ISO/IEC 8859的第一个8位字符集,属于单字节编码,最多能表示的字符范围是0- 255,应用于英文系列。

1.2 GB2312/ GBK

GB2312和GBK是中华人民共和国国家标准汉字信息交换用编码,简称国标码,专门用来表示汉字,是双字节编码。其中GBK编码能够用来同时表示繁体字和简体字,而GB2312只能表示简体字。

1.3 Unicode

Unicode(统一的字符编码标准集)使用2个字节对每一个字符进行编码,是Java语言默认的字符集。

1.4 UTF- 8

UTF-8编码,用1到6个字节编码Unicode字符,用在网页上可以在同一页面显示中文简体繁体及其他语言。

2 Web应用中的中文乱码问题的分析

在Web应用中,通常包括了浏览器、Web服务器、Web应用程序和数据库等部分,每一部分都有可能使用不同的字符集,从而导致字符数据在各种不同的字符集之间转换时出现乱码问题。

在弄清Web应用中的中文乱码问题前,先明确理解Java Web开发中所用到的JSP/Servlet应用程序中的几个有关编码设置的方法。

在JSP/Servlet中主要有以下几种方式可以设置编码("***"表示编码方式):

1) pageEncoding="***"

2) contentType="text/html;charset=***

3) request.setCharacterEncoding("***")

4) response.setCharacterEncoding("***")

其中前两个只能用于JSP中,而后两个可以用于JSP和Servlet中。

1) pageEncoding="***"的作用是设置JSP编译成Servlet时使用的编码。

2) contentType="text/html;charset=***"的作用是指定对服务器响应进行重新编码的编码。

3) request.setCharacterEncoding("***")的作用是设置对客户端请求进行重新编码的编码。

4) response.setCharacterEncoding("***")的作用是指定服务器响应客户端请求时进行重新编码的编码。JSP文件的运行过程如图1所示。

图1 JSP文件的运行过程图

当JSP引擎把JSP文件按pageEncoding所指定的编码方法编码转换为Servlet文件时,若pageEncoding没有指定,则按照con? tentType所指定方法编码。若二者都没有指定,则将按照JVM的默认编码方法进行编码。若这一步骤编码不支持中文,则JSP文件中的中文转化为Servlet文件时本身就是乱码。

客户端浏览器在发送和接收数据时,按照JSP文件的contentType所指定的编码方式来对URL和参数编码。服务器在接收数据时,按照request.setCharacterEncoding的设置对数据进行编码,在发送数据时,按照response.setCharacterEncoding—contentType—pa? geEncoding的优先顺序对要发送的数据进行URL编码。在这个过程中,如果参数中包含中文,而没有设置好编码方式,服务器在处理数据的过程中就会出现中文乱码问题。

3 Java Web开发中文乱码问题的解决方法

3.1页面显示乱码

如果在访问某个JSP页面或者Servlet产生的页面时,页面上本应显示中文信息的地方,却显示为乱码,这可能是浏览器显示不正确,也可能是后台在动态生成界面的时候,其内容就是乱码。

如果是浏览器显示的问题,需要设置JSP或者Servlet的contentType属性。对于JSP中的设置使用的是page指令,设置如下:<% @page contentType=”text/html”;charset=”GB2312”>

对于Servlet生成的页面,可以在输出页面之前调用response的setContentType( )方法,其代码形式如下:response.setContentType(“text/html;charset=GB2312”)

另外,在生成的HTML文件的头部可以加入如下代码:

以减少中文乱码的发生。

3.2用户提交的数据是乱码

当表单中提交的中文数据出现乱码时,原因是request对浏览器提交的数据解码不正确。根据表单提交方式的不同,此类乱码问题有两种解决方法。

对于表单中POST方式提交的数据,数据是作为请求的消息体发送的,默认情况下采用ISO8859-1编码,所以要设置请求对象的字符编码,代码形式如下:

request.setCharacterEncoding("GB2312")

在响应页面上使用response.setCharacterEncoding("GB2312")设置编码方式。

如果需要处理的页面过多时,单个处理就会比较麻烦,这时可以通过设置过滤器将所有的request编码都进行设置。

对于表单中GET方式提交的数据或者URL提交的数据,只在接收数据的JSP文件或Servlet文件中设置request.setCharacterEn? coding参数是不行的,因为在Tomcat5.0中,默认情况下使用ISO8859-1对URL提交的数据和表单中GET方式提交的数据进行编码。因此,在这种情况下,需要修改Tomcat的server.xml文件。具体方法如下:

在Tomcat的server.xml文件中,在port号为8080的Connector元素中增加一个属性:URIEncoding="GB2312"。

3.3数据库中的数据是乱码

如果在写入数据库的时候出现乱码,而我们确定是以GB2312的编码方式发送到数据库上的,那么说明数据库可能不支持GB2312的格式。如果数据库支持中文,那么乱码问题可能就是出现在读取数据库的过程中发生了编码转化。

以MySQL 5.0为例,解决中文汉字编码可以采取下面的方法:

1)在向表中插入中文时,先把中文字符编码转换为ISO8859-1编码,然后再插入表中,而读取时,先把数据库中的内容转换为GB2312编码,再读取。这种方式虽然有效,但是使用起来非常繁琐,而且容易出错。全球化软件开发中要求尽量避免使用这种编码方式。

2)修改MySQL的配置文件。打开< MYSQL_HOME> \my.init文件,把[ mysqld]区的语句default-characterset=latin1修改为de? fault-characterset=GB2312,在[client]区增加default-characterset= GB2312。修改后,数据库默认支持的编码格式就被改成了GB2312编码,这样就根本解决了MySQL的数据库乱码问题。

4结论

综上所述,我们了解了Web应用中常用的编码方式,分析了Java Web应用开发过程中的编码转换,找到了在J2EE平台下Web应用中出现中文乱码问题的根源,并针对不同的情况给出了具体的解决方案,这对于解决中文乱码问题,将会有很大的帮助。

参考文献:

[1]孙卫琴.Tomcat与Java Web开发技术详解[M].北京:电子工业出版社,2005.

[2]孙鑫.Java Web开发详解[M].北京:电子工业出版社,2007.

[3]刘永立.Java环境下Web程序的中文乱码问题与对策[J].电脑编程技巧与维护,2011(14):136-139.

[4]张洪伟.Tomcat Web开发及整合应用[M].北京:清华大学出版社,2006.

[5]刘长生,谢强,丁秋林.Java应用中的汉字乱码问题分析[J].计算机科学与发展,2006,16(1):158-161.

[6]耿祥义,张跃平.JSP实用教程[M].北京:清华大学出版社,2007.

[7]李刚.轻量级JavaEE企业应用实战——Struts 2+Spring+Hibernate融合开发[M].北京:电子工业出版社,2008.

[8]金恩华,徐良贤.J2EE Web应用中汉字编码的研究[J].计算机应用与软件,2005(22).

推荐访问:乱码 中文 解决 开发 研究