getpost请求参数乱码解决方法(qq:2798641729)

Posted java新手

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了getpost请求参数乱码解决方法(qq:2798641729)相关的知识,希望对你有一定的参考价值。

java高级架构师全套vip教学视频,需要的加我qq1197852132

在实际的项目中我们会遇见中文乱码的问题,这个问题是很恶心的事,所以我在这里提供了一些解决中文乱码的方法,希望能给大家一些帮助。

一、单独参数乱码

post请求:request.setCharacterEncoding("utf-8");

当客户端通过GET请求发送数据给服务器时,使用request.getParameter()获取的数据是被服务器误认为ISO-8859-1编码的,也就是说客户端发送过来的数据无论是UTF-8还是GBK,服务器都认为是ISO-8859-1,这就说明我们需要在使用request.getParameter()获取数据后,再转发成正确的编码。例如客户端以UTF-8发送的数据,使用如下转码方式:

get请求:String name = "获取参数内容";
       name = new String(name.getBytes("iso-8859-1"),"utf-8");

二、整个项目乱码

那么对于整个项目怎么统一解决乱码问题呢?这里我们利用拦截器和装饰的方法解决这个问题

我们利用装饰者模式将HttpServletRequest中的getParameter方法进行重新封装,加入处理乱码问题的方法。

/**
 * 装饰reqeust
 * @author cxf
 *
 */
public class EncodingRequest extends HttpServletRequestWrapper {
    private HttpServletRequest req;
    
    public EncodingRequest(HttpServletRequest request) {
        super(request);
        this.req = request;
    }

    public String getParameter(String name) {
        String value = req.getParameter(name);
        
        // 处理编码问题
        try {
            value = new String(value.getBytes("iso-8859-1"), "utf-8");
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
        
        return value;
    }
public class EncodingFilter implements Filter {
    public void destroy() {

    }

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        // 处理post请求编码问题
        request.setCharacterEncoding("utf-8");
        
        HttpServletRequest req = (HttpServletRequest) request;
        
        /*
         * 处理GET请求的编码问题
         */
//        String username = request.getParameter("username");
//        username = new String(username.getBytes("ISO-8859-1"), "UTF-8");
        
        /*
         * 调包request
         * 1. 写一个request的装饰类
         * 2. 在放行时,使用我们自己的request
         */
        if(req.getMethod().equals("GET")) {
            EncodingRequest er = new EncodingRequest(req);
            chain.doFilter(er, response);
        } else if(req.getMethod().equals("POST")) {
            chain.doFilter(request, response);
        }
    }

    public void init(FilterConfig fConfig) throws ServletException {

    }

web.xml配置

  <filter>
    <display-name>EncodingFilter</display-name>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>cn.itcast.web.filter.EncodingFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

这样post和get乱码的问题也就解决了。

三、简单方法

如果觉得上面的方式太繁琐,也可以通过修改 tomcat 的 server.xml 配置文件:

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

改成

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true"/>

注: 如果是ajax发起的get请求中文依然会乱码,这时候需要把 useBodyEncodingForURI="true" 改为 URIEncoding="UTF-8" 。

推荐参考文章 :https://www.cnblogs.com/binye-typing/p/6281627.html

 

以上是关于getpost请求参数乱码解决方法(qq:2798641729)的主要内容,如果未能解决你的问题,请参考以下文章

GetPost请求中文乱码问题有效解决方法

getpost

php使用cUrl方法 getpost请求

ajax如何传中文参数乱码解决办法

jmeter请求参数时,中文出现乱码的解决方法

jmeter请求参数时,中文出现乱码的解决方法