解决JavaEE项目tomcat中文乱码问题【最全方案】

一、Request请求中文参数乱码问题解决方案:

1、GET请求中文参数值乱码问题解决:

    a)解决乱码的核心思路,就是把得到的乱码按照原来乱码的步骤逆序操作。

    1、先以iso-8895-1进行编码

    2、然后再以utf-8进行解码

    3、代码示例:

        String username = request.getParameter("username");       

        username = new String(username.getBytes("ISO-8859-1"), "UTF-8");

     b)配置tomcat的server.xml配置文件,找到以下位置,新增 URIEncoding = "UTF-8"。

       <Connector URIEncoding = "UTF-8" port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />

2、POST请求中文参数值乱码问题解决

    POST请求方式乱码的原因是:Tomcat服务器对参数的默认编码是ISO-8859-1

    POST请求乱码解决,只需要在获取请求参数之前调用 request.setCharacterEncoding("UTF-8"); 方法设置字符集 即可。

    注意点:setCharacterEncoding必须要获取请求参数之前调用才有效。

二、Response服务器和客户端中文乱码问题

    设置服务器的字符串编码

      //设置服务器输出的编码为UTF-8

    response.setCharacterEncoding("UTF-8");

    设置客户端的字符串显示编码。

   //告诉浏览器输出的内容是html,并且以utf-8的编码来查看这个内容。

   response.setHeader(“Content-type”, “text/html; charset=UTF-8”);

    同时设置服务器和客户端的字符串编码(推荐)。

    response.setContentType("text/html;charset=utf-8");

三、采用过滤器解决编码问题

    方案一和方案二可以解决单个程序的编码问题,对于整个项目来讲,建议使用过滤器解决编码问题。

    我们可以自己动手编写自己的编码过滤器,步骤如下:

1、编写自己的过滤器:


package com.test.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;


public class CharacterEncodingFilter implements Filter
{
    @SuppressWarnings("unused")
    private FilterConfig config;
    private String encoding;

    public void destroy()
    {

    }

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException
    {
        request.setCharacterEncoding(encoding);
        response.setContentType("text/html;charset=utf-8");
        chain.doFilter(request, response);

    }

    public void init(FilterConfig config) throws ServletException
    {
        this.config = config;
        this.encoding = config.getInitParameter("encoding");
    }

}
 

2、web.xml做如下配置:


<filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>
            com.test.filter.CharacterEncodingFilter
        </filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章