解决jsp传的文字乱码的两种方法

一种方法是把tomcat的server.xml文件

所有的<Connector>标签的URIEncoding属性进行设置,

如: <Connector port="8000" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK" />

另一种方法是写过滤器

public class SetCharacterEncodingFilter implements Filter {

        private static final String DEFAULT_ENCODING = "UTF-8";

        protected String encoding;

        protected FilterConfig filterConfig;

        protected boolean ignore;

        public SetCharacterEncodingFilter() {

             encoding = null;

             filterConfig = null;

             ignore = true;

        }

        public void destroy() {

        }

        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws             IOException,ServletException {

        try {

              if (ignore || request.getCharacterEncoding() == null)

                     if (encoding != null) {

                            request.setCharacterEncoding(encoding);

                            response.setContentType("text/html; charset=" + encoding);

                     } else {

                            request.setCharacterEncoding(DEFAULT_ENCODING);

                            response.setContentType("text/html; charset=" + DEFAULT_ENCODING);

                     }

            } catch (Exception e) {

                     e.printStackTrace();

            }

            chain.doFilter(request, response);

      }

       public FilterConfig getFilterConfig() {

              return filterConfig;

        }

       public void init(FilterConfig filterConfig) throws ServletException {

             this.filterConfig = filterConfig;

             encoding = filterConfig.getInitParameter("CharacterEncoding");

             String value = filterConfig.getInitParameter("ignore");

             if (value == null)

                  ignore = true;

             else if (value.equalsIgnoreCase("true"))

                  ignore = true;

             else if (value.equalsIgnoreCase("yes"))

                  ignore = true;

             else

                  ignore = false;

        }

         public void setFilterConfig(FilterConfig filterConfig) {

              this.filterConfig = filterConfig;

         }

}

web.xml配置如下:

<filter>

     <filter-name>SetCharacterEncoding</filter-name>

     <filter-class> com.xx.xx.xx.SetCharacterEncodingFilter</filter-class>

     <init-param>

          <param-name>CharacterEncoding</param-name>

          <param-value>UTF-8</param-value>

     </init-param>

      <init-param>

           <param-name>ignore</param-name>

           <param-value>true</param-value>

      </init-param>

</filter>

<filter-mapping>

       <filter-name>SetCharacterEncoding</filter-name>

       <url-pattern>*.action</url-pattern>

</filter-mapping>

<filter-mapping>

        <filter-name>SetCharacterEncoding</filter-name>

         <url-pattern>*.jsp</url-pattern>

</filter-mapping>

最后附上:

        System.out.println(URLDecoder.decode(queryString, "ISO-8859-1")+"URLDecoder.decode()转成ISO-8859-1");

        System.out.println(URLDecoder.decode(queryString, "GBK")+"URLDecoder.decode()转成GBK");

        System.out.println(URLDecoder.decode(queryString, "UTF-8")+"URLDecoder.decode()转成UTF-8");

        System.out.println(new String(queryString.getBytes("ISO-8859-1"),"gbk")+"ISO-8859-1转成gbk");

        System.out.println(new String(queryString.getBytes("ISO-8859-1"),"UTF-8")+"ISO-8859-1转成UTF-8");

        System.out.println(new  String(queryString.getBytes(),"utf-8")+"getBytes()直接转成UTF-8");

猜你喜欢

转载自vicky-luo.iteye.com/blog/2065719