web开发各种乱码问题处理全集 保证解决99%的乱码错误(包括mysql的乱码解决,使用struts2框架的乱码问题)
转载请注明出处 csdn wankaiming
在项目中经常会遇到乱码问题,出现的情况总的分为三种。
第一种:页面显示乱码 这个只要在页面设置好编码即可显示正常
[html] view plaincopyprint?
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
第二种:页面之间传递数据的时候发生乱码或者页面和servlet传递数据的时候发生乱码,这个时候配置下过滤器即可
如下建个过滤器类
[java] view plaincopyprint?
<pre name="code" class="java">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
}
}</pre><br>
<br>
<pre></pre>
<p></p>
<pre></pre>
<span style="color:#ff0000">web.xml</span>中注册好过滤器
<p></p>
<p><span style="font-family:'Microsoft YaHei'"><span style="font-size:16px"></span></span></p>
<pre name="code" class="html"> <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></pre><br>
第三种:使用struts2框架的时候乱码,这个即使设置过滤器也没用,因为struts2的过滤器会优先执行,你改变xml当中过滤器的位置也是没有用的这个需要修改struts2.xml文件 在package标签中加入如下语句即可解决
<p></p>
<p><span style="font-family:'Microsoft YaHei'"><span style="font-size:16px"></span></span></p>
<pre name="code" class="html"> <constant name="struts.i18n.encoding" value="GB18030"></constant></pre><br>
第四种:乱码的出现跟数据库有关 oracle我用的一直没问题。在用mysql的时候出现了问题。前三种方法全部试了之后依然乱码,因为错误发生在数据库上。我用的是hibernate 处理方法是修改配置文件<span style="color:#ff0000">hibernate.cfg.xml</span>
<p></p>
<p><span style="font-family:'Microsoft YaHei'"><span style="font-size:16px"></span></span></p>
<pre name="code" class="html"> <property name="connection.url">
jdbc:mysql://127.0.0.1:3306/onlineexam?characterEncoding=utf8
</property></pre><br>
当然注意此处onlineexam是工程名 utf-8要和你安装mysql的时候选择的相同 一般默认就是这个了。
<p></p>
<p><span style="font-family:'Microsoft YaHei'; font-size:16px">不用hibernate写url的时候也跟上这个?XXX 即可</span></p>
<p><span style="font-family:'Microsoft YaHei'; font-size:18px">比如weblogic当中设置url的时候这么写</span></p>
<p><span style="font-family:'Microsoft YaHei'; font-size:18px"><img src="http://my.csdn.net/uploads/201206/12/1339471747_3939.JPG" alt=""><br>
</span></p>
<p><span style="font-family:'Microsoft YaHei'"><span style="font-size:16px"><br>
</span></span></p>
<p><span style="font-family:'Microsoft YaHei'"><span style="font-size:16px">相信以上基本解决了你的乱码问题。还有一点需要提醒,整个工程建议从头到尾都使用一个编码,比如此处我全部使用的GB18030<br>
<br>
</span><br>
</span></p>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>