您当前的位置:首页>论文资料>JSP初学者遇到的中文乱码问题及解决方案

JSP初学者遇到的中文乱码问题及解决方案

资料类别:论文资料

文档格式:PDF电子版

文件大小:1.58 MB

资料语言:中文

更新时间:2024-12-26 15:25:32



推荐标签:

内容简介

JSP初学者遇到的中文乱码问题及解决方案 ·180-
信息技术
JSP初学者遇到的中文乱码问题及解决方案
梅锦峰阳小兰钱程王子明
(武昌理工学院信息工程学院,湖北武汉430223)
摘要:在使用JSP编程时,都会遇到中文乱码问题,本文首先分析JSP中文乱码的成因,在此基础上深讨常见JSP中文乱码的形式及解决方法,希望能给广大初学者在通到此类问题时提供帮助。
关键词:JSP;中文乱码;成因;解决方案
1概述
JSP全名JavaServerPages,是由sun公司建立的一种动态网页的技术标准。JSP自Java发展而来,因具有良好的通用性、高效性、跨平台性和安全性的特点,而受到众多软件开发者的青咪。在JSP 的使用过程中,不可避免的出现中文乱码间题,本文就JSP的中文乱码成固进行讨论,根据不同情况,给出相应的常见中文乱码间题的解决方案,以供大家学习参考。
2JSP乱码的成因
每个国家和区域都有着自己规定的字符编码集,如美国的 ASCII码,中国的GB2312,固各个国家和地区的缩码方式不同,导致不同区域间交换信息困难。为了解决不同区域间的编码方式不同而产生的冲突间题,unicode(万国码)应运而生,unicode为每种语言中的每个字符都分配了一个统一且唯一的二进制编码,以满足不同国家和区域间信息交换的需求。
Java的内核代码和class字节码文件是基于unicode编码的,由此带来了一些中文乱码间题。原因主要有两方面:
2.1Java和Jsp文件在编译时产生乱码
Java和Jsp源文件的是以字节流的方式进行保存,在由JAVA 源文件编译生成class字节码文件时,由于二者使用的编码方式不同,就导致了这类乱码间题的产生。
2.2Java程序与其他媒介交互时产生乱码
Java程序与数据库(等基于字节流存储的存储媒介)交换数据时会有字符与字节之间的转换,若在转换过程中,二者使用的编码不一致,则产生此类间题的乱码
3常见JSP中文乱码的形式及解决方案
基于以上两种原固,可以将中文乱码的形式分成以下三类:① JSP页面本身产生的中文乱码;②URL在传递参数时产生中文乱码;③表单在提交数据时产生中文乱码。
3.1JSP页面产生的中文乱码
这类乱码间题表现出两种形式,一是表现在Html中,一是表现在邸的动态输出中,这两种形式出现的乱码原因是基于上述的原因1,其解决方案:在JSP页面中配置contentType属性即可,添加代码如下:
<%@ page contenfType="tex/html;charset=GB2312"%> 3.2URL在传递参数时产生中文乱码
URL传递参数时产生的中文乱码一般出现在t方法中,单纯的去设置JsP页面的编码格式是解决不了间题的,这种情况下需要修改Tomeat服务器的配置文件才能解决乱码间题。将Tomeat的 conf目录下的server.xml的配置文件修改如下:

3.3表单在提交数据时产生中文乱码
此类间题出现在使用内置对象request提取数据时。这里re-quest的内置对象的字符编码集与表单页面字符编码集不同,处理这种中文乱码间题有以下三种方式
①在输出页面中的Java程序片中添加以下语句: <% requesl.selCharacterEncoding("GB2312"); %>
②在输出页面中的Java程序片中添加以下语句:<% String usemame =request.getParameler("userName");
out-println("表单输人的 userName 的值:"+new String(userName. getBytes("IS088591"),"gb2312");
%>
3配置一个servlet的过滤器filler来自动处理字符集转换:
以上两种方法在小型web编程中使用起来很是简便,但到了大型web编程中随着输出页面的增多添加的语句就要增多,为此可以配置一个servlet的过滤器filter来自动处理字符集转换,Filter类配置步骤如下:
a.在web项目中添加一个名为CharacterF的serlet类。 b.在CharacterF类中配置如下语句:
publicclassCharacterFimplements Filter(/ 继承 Filter 类 String enooding=null;/学符编码
publicvoiddoFilter (ServletRequestrequest,ServletResponseresponse, FilterChain chain)throwsIOException,ServletExceptionf
if(enooding:=null)
request.setCharacterEncoding(encoding);/ 设置 request 字符编码 response.setContenfType ("text/html;charset="+encoding):// 设 置 re
sponse字符编码
chain.doFilter(request,response)://传遇给下个过器
publicvoidinit(FilterConfigfilterConfig)throwsServletException)
enooding=filterConfig·getInitParameter("enooding")//获取初始数
publicvoid destroyO[encoding=null;
e.CharacterF类配置完成后,配墨web-xml文件,配墨如下: web.xml

encoding
gh2312 <-参数值->


characterF
/*