java jsp 乱码的解决

来源:互联网 发布:网络仙女棒是什么意思 编辑:程序博客网 时间:2024/05/16 17:50

一:1. 将request进行包装的编码类
 
public class EncodingHttpServletRequestWrapper extends
        HttpServletRequestWrapper {
 
    private HttpServletRequest request;
//重写构造方法
    public EncodingHttpServletRequestWrapper(HttpServletRequest request) {
        super(request);
        // TODO Auto-generated constructor stub
        this.request = request;
    }
//重写方法
    @Override
    public String getParameter(String name) {
        // TODO Auto-generated method stub
        String value = request.getParameter(name);
        if(value != null){
            try {
                return new String(value.getBytes("ISO-8859-1"),"UTF-8");
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return super.getParameter(name);
    }
}
2.编写过滤器
public class EncodingFilter implements Filter {
 
 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
 
        HttpServletRequest req = (HttpServletRequest) request;
        String method = req.getMethod();
        if("GET".equals(method)){//处理GET方式
            EncodingHttpServletRequestWrapper wrapper = new EncodingHttpServletRequestWrapper(req);
            chain.doFilter(wrapper, response);
        }else{//POST方法的处理方式
            request.setCharacterEncoding("UTF-8");
            chain.doFilter(request, response);
        }
    }
 
    public void init(FilterConfig fConfig) throws ServletException {
        // TODO Auto-generated method stub
    }
 
    @Override
    public void destroy() {
        // TODO Auto-generated method stub
 
    }
 
}
二。.为防止url后边带的汉字参数乱码,可将参数在客户端编码两次:
  • login_name = encodeURI(login_name);   
  • login_name = encodeURI(login_name);  
  • 服务器端转码一次:
  • String loginName = ParamUtil.getString(request, "login_name"); //赋值的参数loginName  
  • loginName = java.net.URLDecoder.decode(loginName,"UTF-8"); //对它继续转码,转为中文  
  •  
     
     

    以下是转载的:地址为http://sishuok.com/forum/blogPost/list/306.html

    1、文件的乱码
    1.1、项目文本文件默认编码:
           【右击项目】->【Properties】->【Resource】->【Text file encoding】     
     
    1.2、文件默认编码:默认使用项目的默认编码
         【右击文件】->【Properties】->【Resource】->【Text file encoding】
    1.3、 JSP 文件编码:由于 JSP 要翻译为 Servlet
    1.3.1、JSP文件编码:
         【右击文件】->【Properties】->【Resource】->【Text file encoding】
    1.3.2、JSP翻译为Servlet时的编码:
       <%@ page language="java" pageEncoding="utf-8"%>
    中文乱码:在以后学习过程中全部采用UTF-8
    2、浏览器和服务器间传输数据的乱码
     
    2.1、 浏览器端 编码,一般由服务器端告诉浏览器如何解码数据:
    2.1.1、Servlet
              response.setContentType("text/html; charset=UTF-8");
            或者  response.setCharacterEncoding(“UTF-8”);
       2.1.2、JSP
             <%@ page language="java" contentType="text/html; charset=utf-8" %>
       2.1.3、通用
             <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     
    注:浏览器编码可以由我们手工修改,但最后不要这样,一般让浏览器自动选择即可。
    中文乱码:在以后学习过程中全部采用UTF-8
    2、浏览器和服务器间传输数据的乱码
     
    2.2、 服务器端 编码,将客户端传过来的数据进行解码:
          浏览器默认使用ISO-8859-1进行编码数据,然后将数据传输到服务器,因此我们默认只需要将浏览器发送过来的数据转换为我们需要的编码即可。
    2.2.1、最简单方式:
        String username = request.getParameter(“username”);
           username = new String(username.getBytes("ISO-8859-1“), "UTF-8");
       2.2.2、比较好的解决方案
          // 必须 在获取参数之前,调用如下方法先解码
           request.setCharacterEncoding(“UTF-8”);
          String username = request.getParameter(“username”);
    2.4、比较通用方案:在一个Filter中更改所有请求的编码方式:
        1、在src中添加filter来设置编码格式是中文,filter类可以在tomcat的包里面:apache-tomcat-6.0.16.zip\apache-tomcat-6.0.16\webapps\examples\WEB-INF\classes\filters下面,SetCharacterEncodingFilter.java文件
     
         2 、在 web.xml 中配置 filter ,具体配置如下页:
    <filter>
            <filter-name>Set Character Encoding</filter-name>
            <filter-class>filters.SetCharacterEncodingFilter</filter-class>
            <init-param><param-name>encoding</param-name>
                                <param-value>utf-8</param-value></init-param>
    </filter>
    <filter-mapping>
            <filter-name>Set Character Encoding</filter-name>
            <url-pattern>/*</url-pattern>
    </filter-mapping>
    2.5、 GET提交方式中文乱码解决
    通过修改request.setCharacterEncoding(“UTF-8”);只能解决POST提交方式的请求编码,对GET无效。
     
         1 、最简单解决方案: 该解决方案不再需要任何额外配置(如filter)
               TOMCAT默认ISO-8859-1 因此可以设置默认编码为UTF-8解决,在conf\server.xml文件中设置如下
                 <Connector port="8080" protocol="HTTP/1.1"
                                    connectionTimeout="20000"
                                    redirectPort="8443" URIEncoding=”UTF-8”/>
         2 、在 tomcat4 之后,可以通过如下配置来解决中文乱码,但必须配置 filter
             在conf\server.xml文件中设置如下
                        <Connector port="8080" protocol="HTTP/1.1"
                                            connectionTimeout="20000"
                                            redirectPort="8443" useBodyEncodingForURI=“true”  />
             然后request.setCharacterEncoding(“UTF-8”)也可解决GET乱码
    0 0
    原创粉丝点击