书签 分享 收藏 举报 版权申诉 / 9

类型精选JSP中文乱码的产生原因及解决方案.docx

  • 文档编号:7449780
  • 上传时间:2023-01-24
  • 格式:DOCX
  • 页数:9
  • 大小:18.77KB

下面是处理页面(process.jsp)代码:

<%@pagecontentType="text/html;charset=gb2312"%>

JSP的中文处理

<%=request.getParameter("name")%>

如果submit.jsp提交英文字符能正确显示,如果提交中文时就会出现乱码。

原因:

浏览器默认使用UTF-8编码方式来发送请求,而UTF-8和GB2312编码方式表示字符时不一样,这样就出现了不能识别字符。

ØPOST提交方式

解决办法:

A、接受参数时进行编码转换

Strings=newString(request.getParameter("name").getBytes("ISO-8859-1"),"gb2312");

修改后的process.jsp代码如下:

<%@pagecontentType="text/html;charset=gb2312"%>

JSP的中文处理

<%

Strings=newString(request.getParameter("name").getBytes("ISO-8859-1"),"gb2312");

out.print(s);

%>

如果使用该方法的话,每一个参数都必须这样进行转码。

很麻烦。

但确实能够拿到汉字。

B、经过request.seCharacterEncoding("gb2312")对请求进行统一编码,就实现了中文的正常显示。

修改后的process.jsp代码如下:

<%@pagecontentType="text/html;charset=gb2312"%>

<%request.seCharacterEncoding("gb2312");%>

JSP的中文处理

<%=request.getParameter("name")%>

如果使用该方法接受此参数的页面就不必在转码了,即可得到汉字参数。

但每页都需要执行这句话。

C、为了避免每页都要写request.setCharacterEncoding("gb2312"),能够使用过滤器对所有jsp

进行编码处理。

就是使用Servlet规范中的过虑器指定编码,主要代码如下:

importjava.io.*;

importjavax.servlet.Filter;

importjavax.servlet.FilterChain;

importjavax.servlet.FilterConfig;

importjavax.servlet.ServletException;

importjavax.servlet.ServletRequest;

importjavax.servlet.ServletResponse;

publicclassSetCharacterEncodingFilterimplementsFilter{

protectedStringencoding=null;

publicvoiddestroy(){

this.encoding=null;

}

publicvoidinit(FilterConfigfilterConfig)throwsServletException

{

this.encoding=filterConfig.getInitParameter("encoding");

}

publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException

{

request.setCharacterEncoding(encoding);

response.setContentType("text/html;charset="+encoding);

chain.doFilter(request,response);

}

}

过滤器在web.xml中的配置如下:

SetCharacterEncodingFilter

SetCharacterEncodingFilter

encoding

gb2312

SetCharacterEncodingFilter

/*

修改后的process.jsp代码如下:

<%@pagecontentType="text/html;charset=gb2312"%>

JSP的中文处理

<%=request.getParameter("name")%>

以上方法只对POST方式提交有效果。

ØGET提交方式

如果使用get方式提交中文,接受参数的页面也会出现乱码,这个乱码的原因也是tomcat的内部编码格式iso8859-1导致。

Tomcat会以get的缺省编码方式iso8859-1对汉字进行编码,编码后追加到url,导致接受页面得到的参数为乱码。

解决办法:

A、使用POST提交方式解决办法的第一种方式,对接受到的字符进行解码,再转码。

B、首先配置tomcat下server.xml的Connector节点增加useBodyEncodingForURI="true"属性配置,然后在JSP页面中加入<%request.seCharacterEncoding("gb2312");%>所设置的编码格式进行编码。

1、Tomcat中server.xml配置如下:

connectionTimeout="0"

redirectPort="8443"

useBodyEncodingForURI="true"

/>

2、修改后的process.jsp代码如下:

<%@pagecontentType="text/html;charset=gb2312"%>

<%request.seCharacterEncoding("gb2312");%>

JSP的中文处理

<%=request.getParameter("name")%>

三、数据库连接出现乱码

这种乱码会使你插入数据库的中文变成乱码,或者读出显示时也是乱码,解决方法如下:

  在数据库连接字符串中加入编码字符集 

StringUrl="jdbc:

sqlserver:

//localhost:

1433;DataBaseName=mydb;user=sa&password=sa&useUnicode=true&characterEncoding=GB2312"; 

 并在JSP页面中使用如下代码:

 

 response.setContentType("text/html;charset=gb2312");  request.setCharacterEncoding("gb2312");

四、关于jsp在MyEclipse中打开的乱码问题

对于一个已经存在的项目,Jsp文件的存储格式可能是utf-8。

如果新安装的eclipse,则缺省打开使用的编码格式可能iso8859-1。

因此导致jsp里面的汉字出现乱码。

这个乱码鱼解决方式如下:

A、MyeclispeWindow->Preferences弹出属性窗口

 General->Workspace设置Textfileencoding全局设置。

B、右键你的项目---属性---Textfileencoding项目设置

五、关于html页面在eclipse中打开出现乱码情况

由于大部分页面都是由dreamweaver制作,其存储格式跟eclipse的识别有差别导致。

一般这种情况,在eclipse中新建一个jsp,直接从dreamweaver复制页面内容粘贴到jsp即可。

六、JSP页面经过URL传递中文参数的乱码问题

在项目中,我们经常遇到需要在jsp页面切换中传递中文字符。

例如:

http:

//website/test1.jsp?

act=add&type=苹果

Ø一般来说我们很少直接在URL里面把参数写成中文,如例子中的"type=苹果"这样传递。

如果出现这种情况,在我们的接收参数的页面我们只需要做个简单的转换就能够了。

代码test1.jsp:

(主要部分)

<%@pagelanguage="java"import="java.util.*"pageEncoding="gb2312"%>

<%

Stringtype=request.getParameter("type");

Stringresult=newString(type.getBytes("iso-8859-1"),"gb2312");

out.println(result);

%>

Ø更普遍的做法,就是对url中的中文字符进行编码,变成类似type=%20D%20B这样的字符。

代码MyJsp1.jsp:

<%@pagelanguage="java"import="java.util.*"pageEncoding="gb2312"%>

<%@pageimport=".*"%>

act=<%=URLEncoder.encode("中国人非常好")%>'>test

代码MyJsp2.jsp:

<%@pagelanguage="java"import="java.util.*"pageEncoding="gb2312"%>

<%@pageimport=".*"%>

<%

StringtempVal=URLDecoder.decode(request.getParameter("act"));

out.println(newString(tempVal.getBytes("ISO-8859-1"),"gb2312"));

%>

配套讲稿:

如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

特殊限制:

部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

关 键  词:
精选 JSP 中文 乱码 产生 原因 解决方案
提示  冰豆网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:精选JSP中文乱码的产生原因及解决方案.docx
链接地址:https://www.bdocx.com/doc/7449780.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2008-2022 冰点文档网站版权所有

经营许可证编号:鄂ICP备2022015515号-1

收起
展开