站长资源网络编程

分享JSP中文乱码解决方法

整理:jimmy2024/10/27浏览2
简介一、JSP页面中文乱码在JSP页面中,中文显示乱码有两种情况:一种是HTML中的中文乱码,另一种是在JSP中动态输出的中文乱码。先看一个JSP程序:<%@ page language="java" import="java.util.*" %> 中文显</div> <div class="news_infos"><div id="MyContent"><p><strong>一、JSP页面中文乱码</strong></p> <p>在JSP页面中,中文显示乱码有两种情况:一种是HTML中的中文乱码,另一种是在JSP中动态输出的中文乱码。</p> <p>先看一个JSP程序:</p> <div class="htmlcode"> <pre class="brush:java;"> <%@ page language="java" import="java.util.*" %> <html> <head> <title>中文显示示例</title> </head> <body> 这是一个中文显示示例: <% String str = "中文"; out.print(str); %> </body> </html> </pre> </div> <p>上面这个JSP程序看起来好像是在页面显示几句中文而且标题也是中文。运行后在浏览器中显示如图所示</p> <p><a href="javascript:;" onclick="showimg('/UploadFiles/2021-04-02/2015032609581515.png');"><img src="/UploadFiles/2021-04-02/2015032609581515.png" alt="分享JSP中文乱码解决方法" onmousewheel="return bbimg(this)" onload="javascript:resizepic(this)" border="0"/></a></p> <p>原因在于没有在JSP中指定页面显示的编码,消除乱码的解决方案很简单上面代码中page命令修改成如下所示即可</p> <div class="htmlcode"> <pre class="brush:java;"> <%@ page language="java" import="java.util.*" contentType="text/html; charset=GB2312" %> <html> <head> <title>中文显示示例</title> </head> <body> 这是一个中文显示示例: <% String str = "中文"; out.print(str); %> </body> </html> </pre> </div> <p>再次运行乱码消失,原理就是向页面指定编码为GB2312,那么页面就会按照此编码来显示,于是乱码消失。</p> <p><strong>二、URL传递参数中文乱码</strong></p> <p>一般情况下在使用get方法提交表单的时候传递的参数如果是中文的话很可能会出现乱码。</p> <p>下面是一个示例程序</p> <div class="htmlcode"> <pre class="brush:java;"> <%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%> <html> <head> <title>URL传递参数中文处理示例</title> </head> <% String param = request.getParameter("param"); %> <body> <a href="URLCharset.jsp">请点击这个链接</a><br> 你提交的参数为:<%=param%> </body> </html> </pre> </div> <p>上面这个JSP程序的功能就是通过一个URL链接向自身传递一个参数,这个参数是中文字符串,这个程序的运行效果如下图</p> <p><a href="javascript:;" onclick="showimg('/UploadFiles/2021-04-02/2015032609581516.png');"><img src="/UploadFiles/2021-04-02/2015032609581516.png" alt="分享JSP中文乱码解决方法" onmousewheel="return bbimg(this)" onload="javascript:resizepic(this)" border="0"/></a></p> <p>对于URL传递中文参数乱码这个问题,其处理方法比较特殊,仅仅转换这个中文字符串或者设置JSP页面显示编码都是不能解决问题的,需要修改Tomcat服务器的配置文件才能解决问题。在这里修改Tomcat的conf目录下的server.xml配置文件,具体改后的代码如下</p> <div class="htmlcode"> <pre class="brush:java;"> <Connector port="8080" protocol="HTTP/1.1" URIEncoding="gb2312" connectionTimeout="20000" redirectPort="8443" /> </pre> </div> <p>在原来代码中添加URI编码设置URIEncoding=“gb2312”即可,重启Tomcat服务器可以得到正确的页面。其原理也和上面的情况类似,就是向程序指明编码类型,然后显示就正常了。</p> <p><strong>三、表单提交中文乱码</strong></p> <p>对于表单的数据可以使用request.getParameter(“”)的方法获取,但是当表单中出现中文数据的时候就会出现乱码。</p> <p>示例代码如下</p> <div class="htmlcode"> <pre class="brush:java;"> <%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%> <html> <head> <title>Form中文处理示例</title> </head> <body> <font size="2"> 下面是表单内容: <form action="AcceptFormCharset.jsp" method="post"> 用户名:<input type="text" name="userName" size="10"/> 密 码:<input type="password" name="password" size="10"/> <input type="submit" value="提交"> </form> </font> </body> </html> </pre> </div> <p>在上面的表单当中想AcceptFormCharset这个页面提价两项数据,下面是AcceptFormCharset.jsp的内容:</p> <div class="htmlcode"> <pre class="brush:java;"> <%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%> <html> <head> <title>Form中文乱码</title> </head> <body> <font size="2"> 下面是表单提交以后用request取到的表单数据:<br> <% String userName = request.getParameter("userName"); String password = request.getParameter("password"); out.println("表单输入userName的值:" + userName + "<br>"); out.println("表单输入password的值:" + password + "<br>"); %> </font> </body> </html></pre> </div> <p>在上面的程序中,如果表单输入没有中文,则可以正常的显示当输入的数据中有中文的时候,得到的结果如图所示。</p> <p><a href="javascript:;" onclick="showimg('/UploadFiles/2021-04-02/2015032609581517.png');"><img src="/UploadFiles/2021-04-02/2015032609581517.png" alt="分享JSP中文乱码解决方法" onmousewheel="return bbimg(this)" onload="javascript:resizepic(this)" border="0"/></a></p> <p>产生种结果的原因是Tomcat中对于post方法提交的表单采用的默认编码为ISO-8859-1,而这种编码格式不支持中文字符。对于这个问题可以采用转换编码格式的方法来解决,现在对AcceptFromCharset这个页面改动如下:</p> <div class="htmlcode"> <pre class="brush:java;"> <%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%> <html> <head> <title>Form中文乱码</title> </head> <body> <font size="2"> 下面是表单提交以后用request取到的表单数据:<br> <% String userName = request.getParameter("userName"); String password = request.getParameter("password"); out.println("表单输入userName的值:" + new String(userName.getBytes("ISO-8859-1"), "gb2312")+ "<br>"); out.println("表单输入password的值:" + new String(password.getBytes("ISO-8859-1"), "gb2312")+ "<br>"); %> </font> </body> </html> </pre> </div> <p>经过这样的转换编码以后,所有的中文输入都可以用request对象正常取出。在上面这个程序中,第四行和第五行是转换编码格式的关键,先从ISO-8859-1格式的字符串中取出字节内容,然后在用GB2312的编码格式重新构造一个新的字符串。这样就可以支持中文变淡输入的正常取值和显示。改进以后程序运行结果如下</p> <p><a href="javascript:;" onclick="showimg('/UploadFiles/2021-04-02/2015032609581518.png');"><img src="/UploadFiles/2021-04-02/2015032609581518.png" alt="分享JSP中文乱码解决方法" onmousewheel="return bbimg(this)" onload="javascript:resizepic(this)" border="0"/></a></p> <p>经过上面的更改编码格式的处理,表单的中文输入乱码问题已经得到解决。但是如果上面的表单中的输入项不止是两个,那么每个输入项都需要进行编码转换,那样就很麻烦了。这是我们就用到了大名鼎鼎的过滤器filter了。关于这里的内容大致的思虑和上面的一样具体做法请参照笔者的另一篇文章。</p> <p><strong>四、Eclipse中JSP文件中文乱码</strong></p> <p>在Eclipse或者MyEclipse中由于默认的JSP编码格式为ISO-8859-1,所以当打开由其他编辑器编辑的JSP文件时会出现乱码,如图所示</p> <p><a href="javascript:;" onclick="showimg('/UploadFiles/2021-04-02/2015032609581519.png');"><img src="/UploadFiles/2021-04-02/2015032609581519.png" alt="分享JSP中文乱码解决方法" onmousewheel="return bbimg(this)" onload="javascript:resizepic(this)" border="0"/></a></p> <p>对于这个问题我们只需要更改一下Eclipse或者是MyEclipse中对JSP的默认编码就可以了,修改的地方(我的MyEclipse版本为11)如图所示</p> <p><a href="javascript:;" onclick="showimg('/UploadFiles/2021-04-02/2015032609581520.png');"><img src="/UploadFiles/2021-04-02/2015032609581520.png" alt="分享JSP中文乱码解决方法" onmousewheel="return bbimg(this)" onload="javascript:resizepic(this)" border="0"/></a></p> <p>PS</p> <p>在Eclipse或者MyEclipse当中JSP文件默认的编码为ISO-8859-1,所以在JSP代码中间如果出现中文就不能保存,例如如下代码</p> <div class="htmlcode"> <pre class="brush:java;"> <%@ page language="java" import="java.util.*" %> <html> <head> <title>中文显示示例</title> </head> <body> 这是一个中文显示示例: <% String str = "中文"; out.print(str); %> </body> </html> </pre> </div> <p>修改后在保存的时候会提示如下:</p> <p><a href="javascript:;" onclick="showimg('/UploadFiles/2021-04-02/2015032609581621.png');"><img src="/UploadFiles/2021-04-02/2015032609581621.png" alt="分享JSP中文乱码解决方法" onmousewheel="return bbimg(this)" onload="javascript:resizepic(this)" border="0"/></a></p> <p>现这个提示的原因在于JSP源文件中有ISO=8859-1编码无法识别的中文字符,对于这个问题,解决办法就是在JSP页面中声明页面编码格式即可。声明后代码如下:</p> <div class="htmlcode"> <pre class="brush:java;"> <%@ page language="java" import="java.util.*" pageEncoding="GB2312" %> <html> <head> <title>中文显示示例</title> </head> <body> 这是一个中文显示示例: <% String str = "中文"; out.print(str); %> </body> </html></pre> </div> <p>其中第一行中pageEncoding=“gb2312”指明了JSP页面编码采用GB2312,这样就可以正常保存JSP的源文件了。</p> <p>以上就是本文所述的全部内容了,希望大家能够喜欢。</p> <p>请您花一点时间将文章分享给您的朋友或者留下评论。我们将会由衷感谢您的支持!</p></div> </div> </div> <div class="share"> </div> <div class="nextinfo"> <p>上一篇:<a href="http://m.wwsws.com/show/1/162909.html" title="Spring MVC中上传文件实例">Spring MVC中上传文件实例</a></p> <p>下一篇:<a href="http://m.wwsws.com/show/1/162911.html" title="jsp实现checkbox的ajax传值实例">jsp实现checkbox的ajax传值实例</a></p> </div> <div class="otherlink"> <h2>最新资源</h2> <ul> <li> <i class="iconfont icon-point"></i> <a class="text-sm" href="/show/1/620773.html" one-link-mark="yes" title="群星《歌手2024 第3期》[FLAC/分轨][204.16MB]"><span>群星《歌手2024 第3期》[FLAC/分轨][204.16MB]</span></a> </li> <li> <i class="iconfont icon-point"></i> <a class="text-sm" href="/show/1/620772.html" one-link-mark="yes" title="群星《乘风2024 第6期》[320K/MP3][57.95MB]"><span>群星《乘风2024 第6期》[320K/MP3][57.95MB]</span></a> </li> <li> <i class="iconfont icon-point"></i> <a class="text-sm" href="/show/1/620771.html" one-link-mark="yes" title="群星《乘风2024 第6期》[FLAC/分轨][170.72MB]"><span>群星《乘风2024 第6期》[FLAC/分轨][170.72MB]</span></a> </li> <li> <i class="iconfont icon-point"></i> <a class="text-sm" href="/show/1/620770.html" one-link-mark="yes" title="陈立强1995-我爱你胜过这世界[福茂][WAV+CUE]"><span>陈立强1995-我爱你胜过这世界[福茂][WAV+CUE]</span></a> </li> <li> <i class="iconfont icon-point"></i> <a class="text-sm" href="/show/1/620769.html" one-link-mark="yes" title="群星-《2014年十大发烧唱片精选HQCD》[低速原抓WAV+CUE]"><span>群星-《2014年十大发烧唱片精选HQCD》[低速原抓</span></a> </li> <li> <i class="iconfont icon-point"></i> <a class="text-sm" href="/show/1/620768.html" one-link-mark="yes" title="群星2013-青春缤纷辑压箱宝大公开3CD2[新加坡限量版][WAV整轨]"><span>群星2013-青春缤纷辑压箱宝大公开3CD2[新加坡限</span></a> </li> <li> <i class="iconfont icon-point"></i> <a class="text-sm" href="/show/1/620767.html" one-link-mark="yes" title="林育群.2013-BalladShow(日本版)【环球】【WAV+CUE】"><span>林育群.2013-BalladShow(日本版)【环球】【WAV+</span></a> </li> <li> <i class="iconfont icon-point"></i> <a class="text-sm" href="/show/1/620766.html" one-link-mark="yes" title="陈加洛.1992-痛到感觉不到【宝丽金】【WAV+CUE】"><span>陈加洛.1992-痛到感觉不到【宝丽金】【WAV+CUE】</span></a> </li> <li> <i class="iconfont icon-point"></i> <a class="text-sm" href="/show/1/620765.html" one-link-mark="yes" title="群星.2023-宿命之敌电视剧原声带【韶愔音乐】【FLAC分轨】"><span>群星.2023-宿命之敌电视剧原声带【韶愔音乐】【</span></a> </li> <li> <i class="iconfont icon-point"></i> <a class="text-sm" href="/show/1/620764.html" one-link-mark="yes" title="東京事変-大発見[FLAC+CUE]"><span>東京事変-大発見[FLAC+CUE]</span></a> </li> </ul> </div> </div> <div class="sidebar"> <div class="cloud"><h2 class="hometitle">一句话新闻</h2><a href="/3G/1/604690.html"><ul>Windows上运行安卓你用过了吗<br><br>在去年的5月23日,借助Intel Bridge Technology以及Intel Celadon两项技术的驱动,Intel为PC用户带来了Android On Windows(AOW)平台,并携手国内软件公司腾讯共同推出了腾讯应用宝电脑版,将Windows与安卓两大生态进行了融合,PC的使用体验随即被带入到了一个全新的阶段。</ul></a></div> </div> </article> <footer> <p>友情链接:<a href="http://www.imxmx.com/" title="杰晶网络" target="_blank">杰晶网络</a> <a href="http://www.ddrfans.com/" title="DDR爱好者之家" target="_blank">DDR爱好者之家</a> <a href="http://www.nqxw.com/" title="南强小屋" target="_blank">南强小屋</a> <a href="http://www.paidiu.com/" title="黑松山资源网" target="_blank">黑松山资源网</a> <a href="http://www.dyhadc.com/" title="白云城资源网" target="_blank">白云城资源网</a> <a href="/sitemap.xml">SiteMap</a></p> <p>Design by <a href="http://m.wwsws.com">伏龙阁资源网</a> <a href="/">http://m.wwsws.com</a></p> </footer> <script src="/images/nav.js"></script> <script type="text/javascript"> jQuery.noConflict(); jQuery(function() { var elm = jQuery('#left_flow2'); var startPos = jQuery(elm).offset().top; jQuery.event.add(window, "scroll", function() { var p = jQuery(window).scrollTop(); jQuery(elm).css('position', ((p) > startPos) ? 'fixed' : ''); jQuery(elm).css('top', ((p) > startPos) ? '0' : ''); }); }); </script> </body> </html>