日期:2014-05-16  浏览次数:20583 次

java mysql数据库乱码问题——写代码一定要细心,不然会郁闷死的

遇到了一个java mysql 的乱码问题,起初是使用javascript对java后台进行传参,有乱码,使用如下代码解决:

?

new String(request.getParameter("collName").getBytes("ISO8859-1"), "UTF-8");

?

我的数据库、jsp页面都统一是UTF-8的编码,也加了过滤器,所以当Myeclipse打印出乱码来时我非常疑惑,调了一个下午,

?

还在CSDN上发了贴,这最让我吐血的一件事,后来经检查,sql写错了,sql = select * from table where name=姓名;

?

sql语句中,字符串应使用引号进行包裹传参,所以,应改为 sql = select * from table where name='姓名'

?

今天写此文章用来警醒自己,以后不要再发同样的错误,下面把过滤器及其配置写一下:

?

过滤器:

?

public class CharacterEncodingFilter implements Filter {   
    private String edcoding=null;   
    private FilterConfig filterConfig=null;   
    private boolean ignore=true;   
  
    public void destroy() {   
         edcoding=null;   
         filterConfig=null;   
    }   
  
    public void doFilter(ServletRequest request, ServletResponse response,   
            FilterChain filterChain) throws IOException, ServletException {   
        if(ignore==true||request.getCharacterEncoding()==null){   
            String encoding=setCharacterEncoding(request);   
              if(encoding!=null){   
                request.setCharacterEncoding(encoding);                    
                }   
        }   
          filterChain.doFilter(request, response);   
    }   
  
    public void init(FilterConfig filterConfig) throws ServletException {   
        this.filterConfig=filterConfig;   
        this.edcoding=filterConfig.getInitParameter("encoding");   
        String value=filterConfig.getInitParameter("ignore");   
        if(value==null){   
            this.ignore=true;   
        }else if(value.equalsIgnoreCase("true")){   
            this.ignore=true;   
               
        }else{   
            this.ignore=false;   
        }   
           
  
    }   
    public String setCharacterEncoding(ServletRequest request){   
        return this.edcoding;   
    }   
} 

?

?

在web.xml上的配置:

?

    <filter>  
        <filter-name>CharacterEncodingFilter</filter-name>  
        <filter-class>base.filter.CharacterEncodingFilter</filter-class>  
        <init-param>  
            <param-name>encoding</param-name>  
            <param-value>UTF-8</param-value>  
        </init-param>  
    </filter>  
    <filter-mapping>  
        <filter-name>CharacterEncodingFilter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping> 

?

java中解决乱码问题确实麻烦,我给的建议就是统一数据库、jsp页面编码,且编码最好为UTF-8。

?

以前我遇到过一个乱码问题,上传文件时 文件名奇数乱码,偶数正常,查了一下说这是和UTF-8的编码方式有关,但一直

?

没有找到好的解决方法。