zoukankan      html  css  js  c++  java
  • 字符集过滤器

        在做网站项目的时候常常会发生乱码的情况,我经常用一个过滤器来解决乱码的问题,过滤器的代码入下:

    public class charset implements Filter {
    
    
        private static String encode = "UTF-8";//设置 默认UTF-8编码
        
        public void destroy() {
        }
    
        public void doFilter(ServletRequest arg0, ServletResponse arg1,
                FilterChain arg2) throws IOException, ServletException {
    
        HttpServletRequest request = (HttpServletRequest) arg0;  
            HttpServletResponse response = (HttpServletResponse) arg1;  
            
            /*
             * 设置request编码   , 该设置仅对POST有效。
             */
            request.setCharacterEncoding(encode);
            
            /*
             * 设置发送到客户端的响应的内容类型,可以包括字符编码说明。
             * 如果该方法在getWriter()方法被调用之前调用,那么响应的字符编码将仅从给出的内容类型中设置。
             * 该方法如果在getWriter()方法被调用之后或者在被提交之后调用,
             * 将不会设置响应的字符编码,在使用http协议的情况中,该方法设置 Content-type实体报头 。
             */
            response.setContentType("text/html;charset=" + encode);  
            
            /*
             *    如果服务器端使用response.setContentType设置了编码格式,
             *    那么应该使用 response.setCharacterEncoding指定的编码格式,这样就会把之前的设置屏蔽掉。 
             */
            response.setCharacterEncoding(encode);
            
            /*
             * 这段代码会将页面提交的信息编码由ISO8859-1转换为UTF-8
             */
            arg2.doFilter(new CharacterEncodingRequest(request), response);
        }
    
        
        /**
         * 在初始化的时候web.xml文件中设置好的编码去除,代替程序中默认的编码
         */
        public void init(FilterConfig arg0) throws ServletException {
            
            String encoding = arg0.getInitParameter("encode");
            if (encoding != null) {
                encode = encoding;
            }
        }
    
        class CharacterEncodingRequest extends HttpServletRequestWrapper {
            
            private HttpServletRequest request = null;
    
            public CharacterEncodingRequest(HttpServletRequest request) {
                super(request);
                this.request = request;
            }
    
            /**
             * 对参数重新编码
             */
            @Override
            public String getParameter(String name) {
    
                String value = super.getParameter(name);
                
                if (value == null)
                    return null;
            
                String method = request.getMethod();
                
                if ("get".equalsIgnoreCase(method)) {
                    try {
                        value = new String(value.getBytes("ISO8859-1"),  request.getCharacterEncoding());
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                }
                return value;
            }
        }
    }
  • 相关阅读:
    VS2008编写MFC程序--使用opencv2.4()
    November 02nd, 2017 Week 44th Thursday
    November 01st, 2017 Week 44th Wednesday
    October 31st, 2017 Week 44th Tuesday
    October 30th, 2017 Week 44th Monday
    October 29th, 2017 Week 44th Sunday
    October 28th, 2017 Week 43rd Saturday
    October 27th, 2017 Week 43rd Friday
    October 26th, 2017 Week 43rd Thursday
    October 25th, 2017 Week 43rd Wednesday
  • 原文地址:https://www.cnblogs.com/wjn563/p/4333040.html
Copyright © 2011-2022 走看看