转载请注明出处 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