APP下载

Java Web应用开发中的常见乱码形式及解决方法

2017-06-20贾晓芳沈泽刚

软件导刊 2017年4期
关键词:web技术

贾晓芳+沈泽刚

摘要:在运用Java Web 技术开发Web应用程序时,要根据计算机存储以及传输的字符编码的标准进行编程,字符编码不统一会导致多种情况的乱码问题。从乱码问题产生的根本原因着手分析,从字符编码以及转换关系对影响字符编码的因素进行系统分析,并给出可行的解决方案。

关键词:Java Web技术;字符编码;中文乱码

中图分类号:TP301

文献标识码:A

文章编号:16727800(2017)004021403

0引言

Java语言在应用软件开发方面逐渐取代其它编程语言成为网络编程首选语言。Java技术提供跨平台性,支持网络与数据库技术,已广泛应用于移动互联网、网络开发平台等领域。在Java Web应用开发过程中,伴随着各种乱码问题的出现,这给程序员的软件开发工作带来很多麻烦,解决乱码问题是Java Web应用程序开发过程中需解决的首要问题。本文将对开发过程中常出现的几种乱码问题的原因及影响因素进行分析,并给出具体可行的解决方案。

1Java Web應用中的常用编码

在Java Web应用开发中,字符编码转化是必要过程,常用到UTF-8、Unicode、GB2312/GBK、ISO-8859-1这几类。UTF-8是广泛应用于程序开发中的双字节编码,在Unicode字符集中以一种多字节编码的形式存在,能与Unicode编码进行可逆字符转换同时兼容ISO-8859-1编码。该编码本身带有校验功能,在网页上多会出现关于中文简体或者其它语言的提醒。Unicode编码是统一字符编码的标准集,是唯一的二进制计算机字符编码,能表示所有语言的字符,不受语言与运行平台的限制,可以进行跨语言、跨平台的文本转换操作,使用0~65 535的双字节无符号对每一个字符进行编码,确保每个字符的表示方式唯一。 GB2312/GBK编码属于国标码,用来表示中文的双字节字符编码,其中GBK编码表示简体字和繁体字,完全兼容GB2312编码,属于GB2312编码的扩充编码,GB2312编码可以兼容ASCII码,但仅能表示中文简体字。ISO-8859-1编码属于单字节编码,向下兼容ASCII码,应用于英文系统,字符范围只有0~255,无法表示中文字符,在很多协议上作为默认编码,在Java网络传输中作为标准字符集应用。 在英文字符的网页上只能使用ISO-8859-1编码,在只出现中文的网页上,只能选择中文系列的字符编码。尤其是UTF-8编码,UTF系列中文字符编码在实际中比较常用,使用这种编码会降低乱码出现机率。

2Java Web的编码及转换机制

2.1Unicode与常用编码之间的直接转换

Unicode与GB2312/GBK、UTF-8都是中文字符编码。转换时有转换规则,都是通过字节转换为字符串,区别是每个汉字转换成的字节数不同。图1所示是在中文系统中常用编码之间的转换关系,需要Unicode编码辅助完成编码转换,了解中文系统常用编码转化规则就可以避免乱码问题。

2.2编码转换机制

为了使Java语言开发的Web应用程序可以在各种平台下无限制运行,Java内部规定统一使用Unicode字符编码来表示字符集,Java源程序根据操作系统默认的编码方式完成转码,最终转化成UTF-8编码形式写入.class文件中。例如操作系统默认GBK编码,编译时要将GBK编码先与Unicode编码进行转换,然后转换成UTF-8格式写入.class文件中。按照这样的转换方式就不容易在中文系统中出现乱码。若在英文系统中采用ISO-8859-1编码转化就不会出现乱码现象。如图2将简单描述Java源程序编码的转换流程。

3Java Web应用开发中常见乱码形式及成因

当Java Web技术应用在JSP动态网站开发过程中,最容易出现乱码现象,比如Jsp页面显示乱码、用户提交数据出现乱码现象、数据库出现乱码现象等。

3.1JSP页面访问出现乱码问题

基于Java Web技术开发应用程序,访问JSP页面或Servlet 产生的页面时,在本该出现中文字符的地方出现乱码,可能存在两个原因:一是浏览器的显示问题;二是后台代码执行出来的程序内容就是乱码。浏览器有问题,需要着重设置JSP或者Servlet属性。开发工具的字符编码出现问题是由于使用的Eclipse、Tomcat编程软件默认输出的字符是适用于英文系统的ISO-8859-1编码,若编译时没有更改,就容易产生乱码。

运行环境影响正常的编译操作,操作系统版本不同,操作系统默认编码与所安装的系统版本不一致,若将编译好的.class文件植入一些不支持运行的操作系统就会编码冲突,产生乱码。针对该种情况,开发人员多会在不同版本的操作系统上,用记事本工具创建网页源码文件来避免乱码,也可以用指令指明字符编码的方式来避免浏览器本身的字符编码与代码中的字符编码不一致所导致的中文乱码现象。

3.2用户提交表单数据乱码问题

用户提交表单数据时出现乱码,原因是在Request对象获取用户提交数据的中文信息后,由于Request对象对浏览器提交的中文解码不正确,导致输出出现乱码。可以在接收用户提交的表单信息的JSP文件或者Servlet文件中正确设置response.setCharacterEncoding参数,同时将客户端请求编码设置转换成浏览器编码。在响应页面上,提倡正确使用response.setCharacterEncoding(“UTF-8”),正确设置编码方式以避免乱码现象。

3.3访问数据库出现乱码问题

当应用程序通过JDBC向数据库写入或者读取数据时,传入数据库的数据多数以中文编码形式存在,而Java应用程序与数据库传递数据操作时,是以ISO-8859-1编码为默认编码,这时会因编码冲突导致乱码。

4Java Web应用开发中乱码问题解决方案

4.1JSP页面访问出现乱码问题解决方案

JSP页面访问出现乱码问题是应用开发过程中最普遍、复杂性较低的一种乱码问题,开发人员为了避免这种现象,通常在JSP页面部首添加:

<% pageEncoding="UTF-8"%>。

有时也会对软件本身进行设置,一般会将Eclipse中工作空间的字符编码设置为UTF-8编码。而Tomcat,要先找到Server.xml配置文件,找到如下代码,在代码的末端加入URIEncoding=”UTF-8”,再重新启动Tomcat服务器,就能解决问题。

4.2用户提交表单数据乱码问题解决方案

在Servlet中,只對Request设置参数无法正确判断解析URL中传递来的数据参数,为了进一步判断和解决该情况的乱码问题,在用户提交表单数据出现乱码问题时,开发人员通常选择在Servlet中添加:

String str=new String(request.get Parameter(“参数名”).getBytes(“ISO-8859-1”,“UTF-8”);

提交的数据要通过HTTP的实体内容发送给服务器,服务器接收时对Request设置正确的解码方式,以免出现乱码现象。

4.3访问数据库出现乱码现象解决方案

访问数据库出现乱码现象也是与字符编码转换有关,在解决该问题时,首先要确定JSP/Servlet与数据库采用的都是统一的中文编码,然后明确数据库中的中文数据正常,最后在MySQL中,使用配置向导设置数据库将UTF-8编码设置成默认的连接对象。

jdbc:mysql://localhost:3306/db1user=root&password=123456& useUnicode=true&characterEncoding=UTF-8

5过滤器解决乱码问题

采用过滤器解决实际项目中出现的乱码问题,对于Java Web开发应用,过滤器主要用于过滤、拦截请求和响应信息。可以在Servlet过滤器或JSP页面运行之前和之后自动调动,Servlet过滤器能够对Servlet容器的请求和响应进行检查和修改。通过在web.xml文件中配置过滤器和编写实现过滤器功能代码来处理乱码问题。

EncodingFilter com.util.MyFilter encoding utf-8 EncodingFilter /*

在filter配置中,指定初始化参数字符编码encoding的值为UTF-8,filter类中读入该参数的值,并把resquest的字符编码、response的字符编码设置为encoding。过滤器处理乱码的实现编码如下:

public void doFilter(ServletRequest request,ServletRequest response) throws IOException,ServletException{ String encoding=selectEncoding(request); if(encoding!=null) Request.setCharacterEncoding(encoding); chain.doFilter(request,response); }

6结语

研究结果表明,在Java Web技术开发应用中存在的几种不同情况的乱码问题多数与字符编码有关,在程序编写过程中字符编码设置不统一或正确的编码转换方式不正确,都会产生乱码问题。影响字符编码的因素不仅与字符编码自身的转换标准有关,还与软件开发环境以及开发工具与Java输出程序的字符编码设置不一致有关。针对不同情况下发生的乱码问题,应采取有效的解决办法。

参考文献:

[1]贾文潇,叶慧莉.Java Web开发中的乱码问题[J].网络与信息工程,2016(6):6264.

[2]冯忠毅,董海棠,岳建斌,等.Java Web开发中的乱码问题分析及解决方案研究[J].科技信息,2013(19):92,101.

[3]周兵.Java Web开发中的中文乱码问题分析及解决方案[J].电脑知识与技术,2014(29):68846888.

[4]张言辉.J2EE平台下汉字乱码问题分析及解决[J].电脑知识与技术:学术交流,2010(4X):30193021

[5]杨金花.基于JSP技术中文乱码的原因及解决方法[J].电子设计工程,2011(1):2528.〖

(责任编辑:孙娟)

猜你喜欢

web技术
基于物联网的承压特种设备管理系统设计与实现
基于Web的教学管理信息系统的开发与实践研究