转载请注明出处 csdn wankaiming
在项目中经常会遇到乱码问题,出现的情况总的分为三种。
第一种:页面显示乱码 这个只要在页面设置好编码即可显示正常
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
第二种:页面之间传递数据的时候发生乱码或者页面和servlet传递数据的时候发生乱码,这个时候配置下过滤器即可
如下建个过滤器类
package com.mobile.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;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CharacterEncodingFilter implements Filter {
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request=(HttpServletRequest) arg0;
HttpServletResponse response=(HttpServletResponse) arg1;
request.setCharacterEncoding("GB18030");
response.setCharacterEncoding("GB18030");
arg2.doFilter(request, response);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
web.xml中注册好过滤器
<filter>
<filter-name>char</filter-name>
<filter-class>com.mobile.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>char</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
第三种:使用struts2框架的时候乱码,这个即使设置过滤器也没用,因为struts2的过滤器会优先执行,你改变xml当中过滤器的位置也是没有用的这个需要修改struts2.xml文件 在package标签中加入如下语句即可解决
<constant name="struts.i18n.encoding" value="GB18030"></constant>
第四种:乱码的出现跟数据库有关 oracle我用的一直没问题。在用mysql的时候出现了问题。前三种方法全部试了之后依然乱码,因为错误发生在数据库上。我用的是hibernate 处理方法是修改配置文件hibernate.cfg.xml
<property name="connection.url">
jdbc:mysql://127.0.0.1:3306/onlineexam?characterEncoding=utf8
</property>
当然注意此处onlineexam是工程名 utf-8要和你安装mysql的时候选择的相同 一般默认就是这个了。
不用hibernate写url的时候也跟上这个?XXX 即可
比如weblogic当中设置url的时候这么写
相信以上基本解决了你的乱码问题。还有一点需要提醒,整个工程建议从头到尾都使用一个编码,比如此处我全部使用的GB18030