基于JSP技术的中文乱码原因分析及对策研究

2017-01-11 01:59
山西电子技术 2016年6期
关键词:乱码编码方式字符

张 剑

(山西职业技术学院 计算机系,山西 太原 030006)

基于JSP技术的中文乱码原因分析及对策研究

张 剑

(山西职业技术学院 计算机系,山西 太原 030006)

JSP是一种被广泛应用于动态网页制作开发的技术。在网页设计与实现的过程中由于网页编码的复杂性,中文页面在最终客户端显示时经常会出现乱码的情况。本文对基于JSP技术开发的中文页面显示乱码的情况进行了分析并逐一提出了切实可行的解决方案。

JSP;中文乱码;分析;对策

JSP的全称为Java Server Pages,它是由Sun公司提出,多家公司参与建立的动态网页技术标准。它在本质上就是一个Java Servlet,即用Java编写的可以在服务器端运行的程序。它允许在传统的HTML代码中嵌入Java程序段,通过编译、执行以实现动态网页的功能。JSP继承了Java语言的简单易用、完全面向对象及跨平台性,因此很多大公司都在利用JSP开发动态网页。

全世界各个国家都在使用各自的语言进行网页的设计与制作,从而产生了纷繁复杂的编码问题。而在我国,由于中文字符采用了特殊的编码方式,因此,在开发设计中文网页的过程中,可能会出现中文乱码的情况,而网页出现乱码的原因也是比较复杂。因此,本文着重分析了多种中文乱码现象产生的原因并提出了应对策略,从而为广大的JSP网页开发人员提供参考。需要说明的是,本文中所使用的网页服务器为Tomcat,数据库服务器为MySql,其他同类服务器可以进行类比操作。

1 网页常见的字符编码形式

1.1 Latin-1

Latin-1是ISO-8859-1编码的别名,它占用一个字节的编码长度,其中0-127为ASCⅡ码。这个字符集支持的主要是欧洲的部分国家所使用的语言。由于这个编码完美地占用了一个字节的所用空间,因此用其他任何编码形式传输的字节流都可以通过Latin-1进行传输而不会被丢弃。在本文的第二部分介绍了专门利用Latin-1进行转码的实例,利用Latin-1进行转码可以称为是解决编码问题的最后方案。

1.2 GB2312

GB2312是由中国国家标准总局于1980年发布的。它规定两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(也称之为高字节)从0xA1用到0xF7,后面一个字节(也称之为低字节)从0xA1到0xFE。这样共可容纳7000多个简体汉字,其中包括一级汉字3755个,二级汉字3008个。

1.3 GBK

GBK是1995年发布的,它向下兼容GB2312,共包含简体汉字、繁体汉字、各种字符等21000多个。

1.4 GB18030

GB18030有两个版本,分别是GB18030-2000和GB18030-2005。其中GB18030-2000是2000年发布的GBK的替代版本,而GB18030-2005是2005年发布的以汉字为主并包含多种我国少数民族文字,共收录汉字70000余个。

1.5 UTF-8

为了解决各个国家不同文字和符号的编码问题,国际标准化组织于1994年提出了UNICODE编码。而UNICODE代码在网络上传输时又出现了两个标准UTF-8和UTF-16,其中分别代表着每次传输8位和每次传输16位。由于国际化的需求,因此目前网页编码很多使用UTF-8。

2 产生中文乱码的几种原因分析及对策

2.1 MyEclipse或Eclipse编辑页面中出现乱码

原因分析:这个问题较为常见,主要是由于用户安装的MyEclipse或Eclipse默认JSP编辑页面的编码方式为ISO-8859-1,因此,在打开其他编辑器生成的JSP文件时可能会出现乱码。另外,如果是在MyEclipse或Eclipse里编辑JSP页面,如果开发工具默认的页面编码方式不支持JSP页面中出现的字符,则会提示保存失败,必须对编码方式进行修改或去掉编码方式无法解析的字符后才能正确保存。

解决对策:可去相应开发工具中找到“window”|“Preferences”|“General”|“Editors”|“Text Editors”|“Spelling”下面的Encoding选项,将其指选择为“GBK”后选择Apply后点击OK。然后重新启动MyEclipse或Eclipse再进行尝试,发现乱码问题解决。

2.2 JSP页面中文乱码

原因分析:JSP页面在被请求之后,需要经历三个阶段才会在客户端进行显示。首先是由JSP页面编译成JAVA,这个阶段会根据参数pageEncoding的设定读取JSP文件,结果由指定的编码方式转换为统一的UTF-8编码,如果pageEncoding没设定或设定错误将导致中文乱码。其次是JAVA源码编译为二进制码即.class文件,这个过程均采用UTF-8编码。最后是Tomcat载入和执行.class文件,输出结果也就是客户端所见到的页面,此时页面的编码将利用contentType中指定的charset的编码方式进行展示。因此,JSP页面出现中文乱码,应对以上两个参数进行设置。

解决对策:应使用JSP的page指令,指定JSP文档的字符编码方式及在客户端显示时采用的编码方式,格式如下:<%@ page language=”java” contentType = ”text/html;charset = gbk” pageEncoding=”gbk” %>。然后重新尝试,发现乱码问题解决。

2.3 URL中文参数传递出现乱码

原因分析:数据在网页之间经常需要进行传递,而数据在页面之间传递的时候如果使用的是get方法提交,也就是使用“URL参数名=’参数值’”的方式提交的话,并且参数值为中文字符,则很可能会出现乱码的情况。这个乱码不是由于页面或显示的编码问题,而是因为Tomcat服务器参数配置中URIEncoding的设置不支持中文字符,因此会导致中文参数传递出现乱码。如图1所示。

图1 URL中文参数传递出现乱码

解决对策: 进入Tomcat目录,在conf目录下打开server.xml文件。找到Connector标签,在其后参数中添加URIEncoding="gbk"。然后保存,退出,将Tomcat服务器重新启动,再进行尝试,发现乱码问题解决。

2.4 表单传递参数出现乱码

原因分析:表单通过post方法提交数据后,处理页面可以通过request.getParameter()方法获取所传递的数据转换为字符串之后的值,但是得到的字符串的默认编码方式为ISO-8859-1,因此会出现乱码。如图2所示。

图2 表单传递参数出现乱码

解决对策主要有如下两种:

1) 设置request.setCharacterEncoding参数:在处理页面内添加代码<%request.setCharacterEncoding("gbk");%>。这段代码指定了通过request方式获得表单传递来各参数的编码方式。值得注意的是,这段代码应当安放在使用request.getParameter()获取表单参数之前。反之,如果在其之后,则不会起任何作用。进行重试,发现乱码问题解决。

2) 进行转码:前文提过,ISO-8859-1编码完美地占用了一个字节的所用空间,因此用其他任何编码形式传输的字节流都可以通过Latin-1进行传输而不会被丢弃。为此,理论上,任何编码方式最终都可以转化为ISO-8859-1编码进行传输,传输完毕之后再按数据实际占用大小重新组合,从而实现转码。具体步骤如下:首先将从表单获取的值保存String username = request.getParameter("username");,其次将这个字符串按照ISO-8859-1的编码方式生成一个字节数组username.getBytes("ISO-8859-1"),然后利用指定字节数组和编码方式的String的构造方法构造新的字符串new String(username.getBytes("ISO-8859-1"), "gbk"),最后将收到的字符串显示出来从而完成转码。进行测试,发现乱码问题解决。

2.5 数据库读取数据出现中文乱码

原因分析及解决对策:在读取数据库内容后出现中文乱码的情况较为复杂。读者应首先分析在向数据库中插入数据前,字符是否正常。如果插入前就已是乱码,则应按前述步骤进行检查并修正。其次,如果是插入后成为乱码,则要考虑MySql数据库安装时选择了什么编码方式,默认为Latin1,应设置为utf8。安装成功后可以使用命令show variables like 'character%';进行查询,这里的结果除了filesystem选项为binary之外其他都应显示为utf8。再次,在创建数据库及数据表时都应使用character set utf8指定其编码方式。根据以上步骤操作完后,重新访问,发现乱码问题解决。

3 结束语

JSP是目前使用较普遍的开发动态网页的技术,乱码问题也是程序设计中经常困扰开发人员的一件事。本文就一些常见的乱码问题进行了细致的原因分析并提出了切实可行的解决方案。总的来说,在JSP应用中出现乱码问题,程序人员应当根据出现乱码的位置及特点进行细致合理的分析,找出产生乱码的原因,继而能准确地提出解决方案。

[1] 杨俊峰.轻松解决JSP页面中文乱码[J].才智,2011(23):75.

[2] 杨昭兵.基于JSP WEB动态网页技术中中文乱码问题及解决方案[J].甘肃科技纵横,2010(6):40-41.

[3] 李响,郝静静.Java Web开发中文乱码问题的研究与解决[J].电脑知识与技术,2012(1):62-63.

[4] 刘欢杰,魏静敏.关于JSP乱码问题分析总结[J].计算机光盘软件与应用,2012(6):206-207.

[5] 贾文潇,叶慧莉.Java Web开发中的乱码问题[J].电子测试,2016(6):64-65.

[6] 梅锦峰,阳小兰,钱程,等.JSP初学者遇到的中文乱码问题及解决方案[J].黑龙江科技信息,2016(4):180.

Research on the Analysis and Corresponding Countermeasure of Chinese Garbled Based on JSP Technology

Zhang Jian

(ShanxiVocationalandTechnicalCollege,TaiyuanShanxi030006,China)

JSP is a kind of technology which is widely used in the development of dynamic web page. During the process of web design and implementation, Chinese web pages often appear the garbled in the final client displays because of the complexity of web page code. The article makes analysis on the garbled conditions that displaying in Chinese page based on JSP technology and proposes practical solution one by one.

JSP; Chinese garbled; analysis; countermeasure

2016-09-02

张 剑(1981- ),男,山西介休人,讲师,硕士,主要研究方向:计算机软件应用。

1674- 4578(2016)06- 0075- 02

TP393.092

A

猜你喜欢
乱码编码方式字符
对症下药解决多种乱码难题
这些真的不是乱码,是汉字
字符代表几
一种USB接口字符液晶控制器设计
HBM电子称与西门子S7-200系列PLC自由口通讯
消失的殖民村庄和神秘字符
GCOA算法
可穿戴式多通道传感系统功能需求分析及设计
混合编码方式自适应差分进化算法优化设计宽带天线
炫迈:用神奇乱码勾引你视线