遇到了一个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的编码方式有关,但一直
没有找到好的解决方法。