JSP页面中文乱码解决方法
2017-04-25任宪臻梁宏英
任宪臻+梁宏英
摘要:在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="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.