紧急求教一个 乱码问题
我用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;
}
}
你应该可以看明白吧。这样做比较好维护。用吧