设为首页收藏本站language 语言切换
查看: 2030|回复: 0
收起左侧

J2EE基础 如何解决JSP页面显示乱码问题

[复制链接]
发表于 2010-2-20 15:05:58 | 显示全部楼层 |阅读模式
<p >一、JSP页面显示乱码<p >二、表单提交中文时出现乱码<p >三、数据库连接时出现乱码<p >大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着您,我现在把我在JSP开发中遇到的中文乱码的问题及解决办法写出来供大家参考。 <p ><p >一、JSP页面显示乱码 <p >下面的显示页面(display.jsp)就出现乱码: <p ><CENTER><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2"  bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code>&lt;html&gt; &lt;head&gt; &lt;title&gt;JSP的中文处理&lt;/title&gt; &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=gb2312&quot;&gt; &lt;/head&gt; &lt;body&gt; &lt;% out.print(&quot;JSP的中文处理&quot;); %&gt; &lt;/body&gt; &lt;/html&gt;</ccid_code></pre></td></tr></table></ccid_nobr></CENTER><p >对不同的WEB服务器和不同的JDK版本,处理结果就不一样。原因:服务器使用的编码方式不同和浏览器对不同的字符显示结果不同而导致的。解决办法:在JSP页面中指定编码方式(gb2312),即在页面的第一行加上:<p ><CENTER><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2"  bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code>英文代码&lt;%@ page contentType=&quot;text/html; charset=gb2312&quot;%&gt;</ccid_code></pre></td></tr></table></ccid_nobr></CENTER><p >就可以消除乱码了。完整页面如下:<p ><CENTER><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2"  bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code>&lt;%@ page contentType=&quot;text/html; charset=gb2312&quot;%&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;JSP的中文处理&lt;/title&gt; &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=gb2312&quot;&gt; &lt;/head&gt; &lt;body&gt; &lt;% out.print(&quot;JSP的中文处理&quot;); %&gt; &lt;/body&gt; &lt;/html&gt;</ccid_code></pre></td></tr></table></ccid_nobr></CENTER><p ><p >二、表单提交中文时出现乱码 <p >下面是一个提交页面(submit.jsp),代码如下:<p ><CENTER><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2"  bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code>&lt;html&gt; &lt;head&gt; &lt;title&gt;JSP的中文处理&lt;/title&gt; &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=gb2312&quot;&gt; &lt;/head&gt; &lt;body&gt; &lt;form name=&quot;form1&quot; method=&quot;post&quot; action=&quot;process.jsp&quot;&gt; &lt;div align=&quot;center&quot;&gt; &lt;input type=&quot;text&quot; name=&quot;name&quot;&gt; &lt;input type=&quot;submit&quot; name=&quot;Submit&quot; value=&quot;Submit&quot;&gt; &lt;/div&gt; &lt;/form&gt; &lt;/body&gt; &lt;/html&gt;</ccid_code></pre></td></tr></table></ccid_nobr></CENTER><p >下面是处理页面(process.jsp)代码: <p ><CENTER><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2"  bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code>&lt;%@ page contentType=&quot;text/html; charset=gb2312&quot;%&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;JSP的中文处理&lt;/title&gt; &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=gb2312&quot;&gt; &lt;/head&gt; &lt;body&gt; &lt;%=request.getParameter(&quot;name&quot;)%&gt; &lt;/body&gt; &lt;/html&gt;</ccid_code></pre></td></tr></table></ccid_nobr></CENTER><p >如果submit.jsp提交英文字符能正确显示,如果提交中文时就会出现乱码。原因:浏览器默认使用UTF-8编码方式来发送请求,而UTF-8和GB2312编码方式表示字符时不一样,这样就出现了不能识别字符。解决办法:通过request.seCharacterEncoding("gb2312")对请求进行统一编码,就实现了中文的正常显示。修改后的process.jsp代码如下: <p ><CENTER><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2"  bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code>&lt;%@ page contentType=&quot;text/html; charset=gb2312&quot;%&gt; &lt;% request.seCharacterEncoding(&quot;gb2312&quot;); %&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;JSP的中文处理&lt;/title&gt; &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=gb2312&quot;&gt; &lt;/head&gt; &lt;body&gt; &lt;%=request.getParameter(&quot;name&quot;)%&gt; &lt;/body&gt; &lt;/html&gt;</ccid_code></pre></td></tr></table></ccid_nobr></CENTER><p ><p >三、数据库连接出现乱码 <p >只要涉及中文的地方全部是乱码,解决办法:在数据库的数据库URL中加上useUnicode=true&characterEncoding=GBK就OK了。 <p ><p >四、数据库的显示乱码 <p >在mysql4.1.0中,varchar类型,text类型就会出现中文乱码,对于varchar类型把它设为binary属性就可以解决中文问题,对于text类型就要用一个编码转换类来处理,实现如下: <p ><CENTER><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2"  bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code>public String iso2gb(String qs) { try{ if (qs == null) return &quot;NULL&quot;; else { return new String(qs.getBytes(&quot;iso-8859-1&quot;),&quot;gb2312&quot;); } } catch(Exception e){ System.err.println(&quot;iso2gb error:&quot;+e.getMessage()); } return &quot;NULL&quot;; } public String gb2iso(String qs) { try { if (qs == null) return &quot;NULL&quot;; else { return new String(qs.getBytes(&quot;gb2312&quot;),&quot;iso-8859-1&quot;); } } catch(Exception e){ System.err.println(&quot;gb2iso error:&quot;+e.getMessage());} return &quot;NULL&quot;; }</ccid_code></pre></td></tr></table></ccid_nobr></CENTER><p ><p >字符存入数据库时用 gb2iso()函数,将字符从数据库取出时,再用 iso2gb()函数。<p >                                 <p align="center"></p></p>
您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-6 07:15 , Processed in 0.350567 second(s), 24 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表