jsp中文乱码完美解决方案(原创)

关于UTF-8B编码:

UTF-8是UNICODE的一种变长字符编码又称万国码,由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言(如日文,韩文)

我们只关注UTF-8能支持中文,详细请参考相关书籍。

关于jsp编码的说明:


 

<%@ page language="java" pageEncoding="gb2312"%><!--第一处-->

<%@ page contentType="text/html;charset=iso8859-1"%><!--第二处-->

<html>

<head>

<title>JSP的中文处理</title>

<meta http-equiv="Content-Type" content="text/html charset=gb2312"><!--第三处-->

</head>

<body>

<%out.print("JSP的中文处理");%>

</body>

</html>

第一处<%@ page language="java" pageEncoding="gb2312"%>的编码格式为jsp文件的存储格式。Eclipse会根据这个编码格式保存文件。并编译jsp文件,包括里面的汉字。
第二处编码为解码格式。因为存为gb2312的文件被解码为iso8859-1,这样如有中文肯定出乱码。也就是必须一致。而第二处所在的这一行,可以没有。缺省也是使用iso8859-1的编码格式。所以如果没有这一行的话,也会出现乱码。必须一致才可以。
第三处编码为控制浏览器的解码方式。如果前面的解码都一致并且无误的话,这个编码格式用不用设置都可以。有的网页出现乱码,就是因为浏览器不能确定使用哪种编码格式。因为页面有时候会嵌入页面,导致浏览器混淆了编码格式出现了乱码。

解决乱码的基本思路:
所有的编码和解码都用UTF-8,因为只有UTF-8才能支持中文,再也不用
String s=new String(request.getParameter("name").getBytes("ISO-8859-1"),"gb2312") 
这样繁琐的转换了。
解决乱码的基本步骤:

1 、建立如下的过滤器类:
package com.util;
//public class CharacterEncodingFilter {
//}
/*
 * 设置网页的编码过滤类;
 */
import java.io.IOException;
import javax.servlet.*;
//import javax.servlet.http.*;
//import java.io.*;
//import java.util.*;
/**
 *
 * @author
 */
public class CharacterEncodingFilter implements Filter{
    protected String encoding = null;
    protected FilterConfig filterConfig = null;
    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
        this.encoding = filterConfig.getInitParameter("encoding");
    }
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        //if (encoding != null) {
            request.setCharacterEncoding(encoding);
            response.setContentType("text/html; charset="+encoding);
       // }
        chain.doFilter(request, response);
    }
    public void destroy() {
        this.encoding = null;
        this.filterConfig = null;
    }
}
2、在web.xml配置过滤器,即所有的请求和服务器输出都用UTF-8编码:
<filter>
  <display-name>charencoding</display-name>
  <filter-name>CharacterEncodingFilter</filter-name>
  <filter-class>com.util.CharacterEncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>UTF-8</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>CharacterEncodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
  <dispatcher>FORWARD</dispatcher>
  <dispatcher>INCLUDE</dispatcher>
  <dispatcher>REQUEST</dispatcher>
 
 </filter-mapping>
3、在所有jsp页面都加入如下的代码:
 
  在page指令出加入:
    <%@ page contentType="text/html; charset=UTF-8"%>
   <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
4、在<head></head>之间加入如下代码:
<meta http-equiv="Content-Type" content="text/html charset=UTF-8">
5、在tomcat\conf\目录的server.xml中作如下设置,在<Connector项加入URIEncoding="UTF-8":
如下所示:

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               URIEncoding="UTF-8"/
6、最后,重启tomcat ,浏览网页一切正常。
特别说明:
如果用MySql数据库,MySql的编码也必须用UTF-8编码,否则中文不但在MySql会显示乱码,而且在JSP中也会显示乱码的。

转载请注明出处:http://blog.163.com/sxzyh1688@126/blog/static/162300265201222034032696/
posted @ 2012-10-20 09:16  java程序员-c  阅读(203)  评论(0编辑  收藏  举报