日期:2014-05-18  浏览次数:20728 次

紧急求教一个 乱码问题
我用struts开发是,只要一用mapping.findforward,就出现乱码。用EncodingFilter了还是一样!,我把主要代码发出来,大火帮忙看看!
EncodingFilter
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
  throws IOException, ServletException {
 
  if(request.getCharacterEncoding() == null && encoding!=null ){
  request.setCharacterEncoding(encoding);
  }

  chain.doFilter(request, response);
  }

  public void init(FilterConfig filterConfig) throws ServletException {
  this.filterConfig = filterConfig;
  this.encoding = filterConfig.getInitParameter("encoding");
  }


  public void destroy() {
  this.encoding = null;
  this.filterConfig = null;
  }
web.xml
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
com.lbj.util.EncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB18030</param-value>
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

------解决方案--------------------
<param-value>GB18030 </param-value> 

这是什么编码 ??改成gbk试试 ?
还有就是页面和过滤器的编码一致 。。应该没问题。。
------解决方案--------------------
gb18030是亚洲的编码,gbk也只算的它的子集,用gb18030应当没问题,你用的是struts1吧,那个我不是很熟悉,我用的是struts2,这两个有本质的区别,不过乱码问题要看具体是在哪里产生的。总结一下:一般情况下,
1、如果是在客户端乱码,你则可查看jsp文件<head>部分,增加一个<meta http-equiv="Content-Type" content="text/html;charset=gbk">
2、如果是服务哭端接收时就乱码了,则分两种情况post:request.setCharacterEncoding("gbk"),get:response.setContentType(HTTP/1.1);和response.setCharacterEncoding("gbk");
3、如果是在服务哭端响应时乱码了,则要修改web容器的配置文件,增加一个属性:URIEncoding="gbk";
第3条一般人是不知道的,它还可以解决get方法的AJAX乱码。希望这些能对你有所帮助。
------解决方案--------------------
public static String toChinese(String strvalue) {
try {
if (strvalue == null) {
return null;
} else {
strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK");
return strvalue;
}
} catch (Exception e) {
return null;
}
}

你应该可以看明白吧。这样做比较好维护。用吧