您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > JSP中文乱码问题终极解决方案
JSP中文乱码问题终极解决方案JSP中文乱码问题有如下几个方面:页面乱码、参数乱码、表单乱码、源文件乱码。下面来逐一解决其中的乱码问题。一、JSP页面中文乱码在JSP页面中,中文显示乱码有两种情况:一种是HTML中的中文乱码,另一种是在JSP中动态输出的中文乱码。先看一个JSP程序:[java]%@pagelanguage=javaimport=java.util.*%htmlheadtitle中文显示示例/title/headbody这是一个中文显示示例:%Stringstr=中文;out.print(str);%/body/html上面这个JSP程序看起来好像是在页面显示几句中文而且标题也是中文。运行后在浏览器中显示如图所示原因在于没有在JSP中指定页面显示的编码,消除乱码的解决方案很简单上面代码中page命令修改成如下所示即可[java]%@pagelanguage=javaimport=java.util.*contentType=text/html;charset=GB2312%htmlheadtitle中文显示示例/title/headbody这是一个中文显示示例:%Stringstr=中文;out.print(str);%/body/html再次运行乱码消失,原理就是向页面指定编码为GB2312,那么页面就会按照此编码来显示,于是乱码消失。二、URL传递参数中文乱码一般情况下在使用get方法提交表单的时候传递的参数如果是中文的话很可能会出现乱码。下面是一个示例程序[java]%@pagelanguage=javaimport=java.util.*contentType=text/html;charset=gb2312%htmlheadtitleURL传递参数中文处理示例/title/head%Stringparam=request.getParameter(param);%bodyahref=URLCharset.jsp?param='中文'请点击这个链接/abr你提交的参数为:%=param%/body/html上面这个JSP程序的功能就是通过一个URL链接向自身传递一个参数,这个参数是中文字符串,这个程序的运行效果如下图对于URL传递中文参数乱码这个问题,其处理方法比较特殊,仅仅转换这个中文字符串或者设置JSP页面显示编码都是不能解决问题的,需要修改Tomcat服务器的配置文件才能解决问题。在这里修改Tomcat的conf目录下的server.xml配置文件,具体改后的代码如下[html]Connectorport=8080protocol=HTTP/1.1URIEncoding=gb2312connectionTimeout=20000redirectPort=8443/Connectorport=8080protocol=HTTP/1.1URIEncoding=gb2312connectionTimeout=20000redirectPort=8443/在原来代码中添加URI编码设置URIEncoding=“gb2312”即可,重启Tomcat服务器可以得到正确的页面。其原理也和上面的情况类似,就是向程序指明编码类型,然后显示就正常了。三、表单提交中文乱码对于表单的数据可以使用request.getParameter(“”)的方法获取,但是当表单中出现中文数据的时候就会出现乱码。示例代码如下[java]%@pagelanguage=javaimport=java.util.*contentType=text/html;charset=gb2312%htmlheadtitleForm中文处理示例/title/headbodyfontsize=2下面是表单内容:formaction=AcceptFormCharset.jspmethod=post用户名:inputtype=textname=userNamesize=10/密码:inputtype=passwordname=passwordsize=10/inputtype=submitvalue=提交/form/font/body/html%@pagelanguage=javaimport=java.util.*contentType=text/html;charset=gb2312%htmlheadtitleForm中文处理示例/title/headbodyfontsize=2下面是表单内容:formaction=AcceptFormCharset.jspmethod=post用户名:inputtype=textname=userNamesize=10/密码:inputtype=passwordname=passwordsize=10/inputtype=submitvalue=提交/form/font/body/html在上面的表单当中想AcceptFormCharset这个页面提价两项数据,下面是AcceptFormCharset.jsp的内容:[java]%@pagelanguage=javaimport=java.util.*contentType=text/html;charset=gb2312%htmlheadtitleForm中文乱码/title/headbodyfontsize=2下面是表单提交以后用request取到的表单数据:br%StringuserName=request.getParameter(userName);Stringpassword=request.getParameter(password);out.println(表单输入userName的值:+userName+br);out.println(表单输入password的值:+password+br);%/font/body/html%@pagelanguage=javaimport=java.util.*contentType=text/html;charset=gb2312%htmlheadtitleForm中文乱码/title/headbodyfontsize=2下面是表单提交以后用request取到的表单数据:br%StringuserName=request.getParameter(userName);Stringpassword=request.getParameter(password);out.println(表单输入userName的值:+userName+br);out.println(表单输入password的值:+password+br);%/font/body/html在上面的程序中,如果表单输入没有中文,则可以正常的显示当输入的数据中有中文的时候,得到的结果如图所示。产生种结果的原因是Tomcat中对于post方法提交的表单采用的默认编码为ISO-8859-1,而这种编码格式不支持中文字符。对于这个问题可以采用转换编码格式的方法来解决,现在对AcceptFromCharset这个页面改动如下:[java]%@pagelanguage=javaimport=java.util.*contentType=text/html;charset=gb2312%htmlheadtitleForm中文乱码/title/headbodyfontsize=2下面是表单提交以后用request取到的表单数据:br%StringuserName=request.getParameter(userName);Stringpassword=request.getParameter(password);out.println(表单输入userName的值:+newString(userName.getBytes(ISO-8859-1),gb2312)+br);out.println(表单输入password的值:+newString(password.getBytes(ISO-8859-1),gb2312)+br);%/font/body/html%@pagelanguage=javaimport=java.util.*contentType=text/html;charset=gb2312%htmlheadtitleForm中文乱码/title/headbodyfontsize=2下面是表单提交以后用request取到的表单数据:br%StringuserName=request.getParameter(userName);Stringpassword=request.getParameter(password);out.println(表单输入userName的值:+newString(userName.getBytes(ISO-8859-1),gb2312)+br);out.println(表单输入password的值:+newString(password.getBytes(ISO-8859-1),gb2312)+br);%/font/body/html经过这样的转换编码以后,所有的中文输入都可以用request对象正常取出。在上面这个程序中,第四行和第五行是转换编码格式的关键,先从ISO-8859-1格式的字符串中取出字节内容,然后在用GB2312的编码格式重新构造一个新的字符串。这样就可以支持中文变淡输入的正常取值和显示。改进以后程序运行结果如下经过上面的更改编码格式的处理,表单的中文输入乱码问题已经得到解决。但是如果上面的表单中的输入项不止是两个,那么每个输入项都需要进行编码转换,那样就很麻烦了。这是我们就用到了大名鼎鼎的过滤器filter了。四、Eclipse中JSP文件中文乱码在Eclipse或者MyEclipse中由于默认的JSP编码格式为ISO-8859-1,所以当打开由其他编辑器编辑的JSP文件时会出现乱码,如图所示对于这个问题我们只需要更改一下Eclipse或者是MyEclipse中对JSP的默认编码就可以了,修改的地方(我的MyEclipse版本为11)如图所示PS在Eclipse或者MyEclipse当中JSP文件默认的编码为ISO-8859-1,所以在JSP代码中间如果出现中文就不能保存,例如如下代码[java]%@pagelanguage=javaimport=java.util.*%htmlheadtitle中文显示示例/title/headbody这是一个中文显示示例:%Stringstr=中文;out.print(str);%/body/html%@pagelanguage=javaimport=java.util.*%htmlheadtitle中文显示示例/title/headbody这是一个中文显示示例:%Stringstr=中文;out.print(str);%/body/html修改后在保存的时候会提示如下:现这个提示的原因在于JSP源文件中有ISO=8859-1编码无法识别的中文字符,对于这个问题,解决办法就是在JSP页面中声明页面编码格式即可。声明后代码如下:[java]%@pagelanguage=javaimport=java.util.*pageEncoding=GB2312%htmlhead
本文标题:JSP中文乱码问题终极解决方案
链接地址:https://www.777doc.com/doc-4335339 .html