APP下载

JSP页面中文乱码解决方法

2017-04-25任宪臻梁宏英

数字技术与应用 2017年1期
关键词:字符集

任宪臻+梁宏英

摘要:在Java Web应用开发过程中,显示中文信息页面时经常出现乱码问题。出现中文乱码问题的根本主要在于字符编码,大部分乱码是因页面编码不一致引起。笔者根据实际应用开发中遇到的问题,对基于Eclipse Java EE IDE for Web Developers(以下简称Eclipse EE)+Tomcat8.0开发中遇到的JSP中文乱码问题,总结提出了一种行之有效的解决办法,可以有效地解决JSP中文乱码问题。

关键词:字符集;字符编码;中文乱码

中图分类号:TP31 文献标识码:A 文章编号:1007-9416(2017)01-0154-01

在Java Web应用开发中,JSP页面显示中文信息乱码一般表现为:JSP编码乱码、HTML编码乱码、request获取数据乱码、response输出信息乱码等,本文主要针对出现的这些乱码问题,提出一种行之有效的解决中文显示乱码的方法。

1 字符集与字符编码

字符是各種文字和符号的总称,包括各个国家的文字、标点符号、图形符号、数字等,而字符集是多个字符的集合。字符集种类较多,常见字符集有ASCII字符集、GB2312字符集、GBK字符集、GB18030字符集、Unicode字符集等。

计算机要处理各种字符集中的字符,首先需要对字符进行编码,以便计算机能够识别、存储各种字符。所谓字符编码,是指以二进制数字对应字符集中的字符,即规定每个字符分别用一个字节还是多个字节存储、用哪些字节存储等。因此,对字符进行编码是信息交流的技术基础。字符编码和字符集不同,一种字符集可以有一种或多种字符编码,如Unicode字符集有多种编码方式,如UTF-8、UTF-16、UTF-32等。

2 在Eclipse EE下更改默认字符集编码

为了使开发的Java Web应用能够具有更好的国际化支持、能够最大程度地支持中文输出,在Eclipse EE下编写文件最好使用UTF-8编码。在Eclipse EE下修改默认字符集编码的方法如下:

(1)依次单击Window->Preferences->General->Wordspace,在右侧的Text file encoding处,勾选other选项,选择UTF-8。

(2)依次单击Window-> Preferences ->Web->CSS Files/HTML Files/JSP Files(每次选择一种类型的文件设置),在右侧的Encoding处,选择“ISO 10646/Unicode(UTF-8)”。

(3)完成以上操作,单击“OK”按钮保存设置。至此,文件编码设置完毕。

3 修改Tomcat8.0的server.xml文件

在tomcat8.0安装目录下的conf目录中,有一个名为server.xml的文件,该文件主要用于对整个容器进行相关的配置。在server.xml文件中,被称为连接器的元素主要负责接收客户的请求,以及向客户端回送响应的消息。元素有一个URIEncoding属性,该属性用于指定Tomcat服务器解码URL的字符编码。在Tomcat8.0中,如果没有显式指定URIEncoding属性的值,则使用其默认值UTF-8(若系统属性org.apache.catalina.STRICT_SERVLET_COMPLIANCE的被设置为true,则URIEncoding属性的默认值为ISO-8859-1)。

为了避免中文显示乱码,可以为元素的URIEncoding属性显示指定值为“UTF-8”,这样就明确指定Tomcat8服务器用“UTF-8”对URL进行解码,添加代码如下:

指定URIEncoding="UTF-8"后,如果请求的URL里面的参数也是使用UTF-8编码,那么即使URL请求的参数中包含了中文字符,在客户端显示中文也不会出现乱码,但是如果URL里面的参数不是使用UTF-8编码(如使用GBK编码),此时因为请求URL的编码与Tomcat解码应用的编码不一致,如果客户端未对接收的信息进行正确的编码转换,可能就会发生中文显示乱码问题。因此,为了避免乱码,请求URL的编码方式尽量要与tomcat的解码方式保持一致。

但是麻烦的是,没有规范明确指定URL采用的具体的编码方法,而是交给应用程序(浏览器)自己决定,这就导致“URL编码”成为了一个混乱的领域。目前很多浏览器使用UTF-8作为URL的默认编码,也有浏览器使用“ISO-8859-1”编码URL,或者使用当前页面的编码。为了使请求URL的编码方式与Tomcat服务器的解码方式保持一致,可以指定浏览器发送请求信息时的编码,如在IE11中,可以指定以UTF-8编码发送URL路径,如图1所示。

4 编码设置总结

经过上述设置,JSP中文乱码问题基本可以得到解决,但是有以下几点在实际应用中还需要注意:

(1)Tomcat配置文件Server.xml中URIEncoding="UTF-8" 设置只对get类型的请求有效,对post请求类型无效。所以即使配置了URIEncoding="UTF-8",在服务器端接收到的post类型的请求参数编码仍然为“ISO-8859-1”,而不是“UTF-8”。

(2)使用post请求时,为了避免中文乱码显示,可以在获取请求参数值前,首先设置request对象和response对象的字符编码。

<% request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");%>

(3)如果JSP程序中使用了Java Bean的属性设置语句,那么上述2)中的字符编码设置一定要放置在Java Bean属性设置之前。

<%request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");%>

参考文献

[1]宋智军,邱仲潘.JSP从入门到精通.电子工业出版社,2012.

[2]何福贵,张海,张力展,著.JSP开发案例教程.机械工业出版社,2013.

[3]耿祥义,张跃平.JSP基础教程.清华大学出版社,2009.

猜你喜欢

字符集
ORACLE字符集问题的分析
PHP+MySQL网站中关于上传中文文件名照片乱码问题的探讨
ORACLE数据库字符集问题及解决方法
医院信息系统Oracle数据库中导入数据中文乱码的解决技术
FilterFA:一种基于字符集规约的模式串匹配算法
.Net框架联合Oracle字符集问题研究
一种基于分段式字符集的彩虹表明文生成方式∗
不依赖字符集的数据库非标字段检测方法
PHP与MySQL Web应用平台中文乱码问题研究