`
bcyy
  • 浏览: 1823212 次
文章分类
社区版块
存档分类
最新评论

JSP HTML JAVASCRIPT 中文乱码 解决方案 大全

 
阅读更多
SP HTML JAVAS<wbr style="line-height:25px; text-align:left"><span style="line-height:25px; text-align:left">CRIPT 中文乱码 解决方案 大全 </span></wbr>


JSP的中文字符一直是各位初学者首先要解决的问题,下面进行了总结,也给出了解决办法。

C4.1 HTML中文编码转换

在JSP文件中的静态文字显示乱码,则需要在<head></head>之间增加中文设置代码,如清单附C-5所示。

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

charset指定UTF-8字符集,当然也可以指定其他支持中文的编码,如GBK和GB2312。但是整个Web应用中一定要统一一种编码,本书推荐统一为UTF-8编码。

C4.2 JSP中文编码转换

针对Tomcat下动态内容的中文乱码问题,有以下几个解决办法:

1. 在每个JSP文件的开头增加如下代码:

<%@ page language="java" contentType="text/html;charset=UTF-8"

pageEncoding="UTF-8"%>

2. 设置编码参数:

request.setCharacterEncoding("UTF-8");

3. 使用编码过滤器。创建过滤器类SetCharacterEncoding,源码如清单附C-5所示。

清单附C-5 SetCharacterEncoding.java

package chapc;



imp<wbr style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">ort java.io.IOException;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"></span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">imp</span><wbr style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">ort javax.servlet.Filter;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">imp</span><wbr style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">ort javax.servlet.FilterChain;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">imp</span><wbr style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">ort javax.servlet.FilterConfig;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">imp</span><wbr style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">ort javax.servlet.ServletException;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">imp</span><wbr style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">ort javax.servlet.ServletRequest;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">imp</span><wbr style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">ort javax.servlet.ServletResponse;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"></span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">public class SetCharacterEncoding implements Filter {</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"></span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"> @Override</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"> public void destroy() { </span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"> }</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"></span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"> @Override</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"> public void doFilter(ServletRequest request, ServletResponseresponse,</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"> FilterChain chain) throws IOException, ServletException{</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"> //设置字符编码</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"> request.setCharacterEncoding("UTF-8");</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"> //将控制传到下一个过滤器,如果没有过滤器则传到被调用者</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"> chain.doFilter(request, response);</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"> }</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"></span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"> @Override</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"> public void init(FilterConfig arg0) throws ServletException{</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"> }</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">}</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">过滤器类还需要在web.xml中进行配置,设定要过滤哪些请求。过滤器在web.xml中的配置如清单附C-6所示。</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">清单附C-6 web.xml片段</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">&lt;filter&gt;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">&lt;filter-name&gt;SetCharacterEncoding&lt;/filter-name&gt;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">&lt;filter-class&gt;chapc.SetCharacterEncoding&lt;/filter-class&gt;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">&lt;/filter&gt;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">&lt;filter-mapping&gt;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">&lt;filter-name&gt;SetCharacterEncoding&lt;/filter-name&gt;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">&lt;url-pattern&gt;/*&lt;/url-pattern&gt;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">&lt;/filter-mapping&gt;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">方法1、方法2和方法3经常需要使用,但它们一般不是独立使用,而是两两结合:1和2结合;1和3结合。附录A中的示例用到了1和2的结合。第四章Hibernate中的信息发布系统用到了1和3的结合。</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"><em><strong>4.修改Tomcat根目录中conf子目录下的server.xml文件,在中加入URIEncoding="UTF-8",如清单附C-7所示。</strong></em></span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">清单附C-7 server.xml片段</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">&lt;Connector connectionTimeout="20000"</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"> port="8080"</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"> protocol="HTTP/1.1"</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"> redirectPort="8443"</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"> URIEncoding="UTF-8"/&gt;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">该方法用来解决浏览器地址栏中的传递中文参数导致的乱码问题。浏览器地址栏传递参数(URL传参)一般表现为三种情况:form表单的get方法提交、超链接传参和response传参。</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"><em><strong>Ø form表单提交方法是get:</strong></em></span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">&lt;form act</span><wbr style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">ion="registerProcess.jsp"method="get"&gt;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"><em><strong>Ø 在超链接中传递中文参数:</strong></em></span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">&lt;ahref="a.jsp?p=中文参数"&gt;超链接传递中文参数测试&lt;/a&gt;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"><em><strong>5. 如果是调用response.sendRedirect传递中文参数产生的乱码,如:</strong></em></span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">response.sendRedirect("a.jsp?p=中文参数");</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">请修改成如:</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">&lt;% //引入URLEncoder %&gt;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">&lt;%@pageimp</span><wbr style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">ort="java.net.URLEncoder"%&gt;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">&lt;%</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">String p = "中文参数";</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">//对中文参数编码</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">p = URLEncoder.encode(p, "UTF-8");</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">response.sendRedirect("a.jsp?p=" + p);</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">%&gt;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">以解决乱码问题。</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"> 如果方法4还不能解决某些超链接传参乱码问题,请使用方法5,如下:</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">&lt;%@pageimp</span><wbr style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">ort="java.net.URLEncoder"%&gt;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">&lt;%</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">String p = "中文参数";</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">//对中文参数编码</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">p = URLEncoder.encode(p, "UTF-8");</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">%&gt;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">&lt;a href="a.jsp?p=&lt;%=p%&gt;"&gt;超链接传递中文参数测试&lt;/a&gt;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">6. JavaS</span><wbr style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">cript中如果出现URL传参乱码问题,如:</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">open("a.jsp?p=中文参数");</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">请修改成:</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">&lt;script type="text/javas</span><wbr style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">cript"&gt;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">function openWindow()</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">{</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"> var url = "a.jsp?p=中文参数";</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"> url = encodeURI(url);</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"> open(url);</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">}</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">&lt;/script&gt;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">&lt;input type="button" value="JavaS</span><wbr style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">cript中文参数"</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left"> on</span><wbr style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">click="openWindow();"&gt;</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">以解决乱码问题。</span><br style="line-height:25px; text-align:left"><br style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">JavaS</span><wbr style="line-height:25px; text-align:left"><span style="font-size:18px; line-height:25px; text-align:left">cript中的open方法打开浏览器窗口,传递参数,其本质也是URL传参。一般方法4就可以很好的解决中文参数乱码问题。如果方法4不生效,才考虑方法六。</span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics