最近刚被乱码问题折腾的我夜不能寐~
最近想做个办公管理系统的的项目。没想到刚做了一点就碰到让人头疼的乱码问题。因为要用到上传组件。我用的是
smartupload组件~~于是就上网找了一通。大家说的最多的没有统一编码。我就把所有的编码都改成GBK。启动-->
运行还是乱码。不行。还得重新就行分析。有人说smartupload乱码问题由来已久。不过也有牛人说可以用GBK编码
还有修改源码来解决。无奈我不想弄源码。只好在一次查找是否有没有修改的GBK。我都冲动的想修改TOMCAT
不过运行还是没有通过。我扛不住了。就去问我的一个老师。老师还好给我说了一通。不过还是没有调试通过。我想也有可能是smartupload的问题。于是又下载一个Uploadbean组件进行重新调试。我此时觉得我应该可以调试通过。领我失望的是。口碑较好的UpLoadBean也没有通过。我就想到底是什么原因那。 头很大。只好求救CSDN啦。我先查找了以前的帖子。正好一一篇新手头疼的乱码问题。我看了原来是用过滤器进行保证请求的页面全是GBK编码。我如获至宝。加入到我的项目里。另我气愤的还是乱码依旧。不得已于是在J2EE发了一个关于乱码的问题。我也加紧调试我的程序。正好我一个同学来我宿舍。我告诉他帮我跳下我的乱码问题。他把他的笔记拿给我看。上面总结的第一条写照在sevlet中要把 输出流写在设置编码的前面。我恍然大悟。原来是这个小问题。我想应该是这个问题了我说这么设置之后编码依然是ISO编码。果不出所料调试通过。
对乱码问题的总结如下:
1。首先加个过滤类。让所有请求的类都变成GBK编码。
代码如下:web.xml
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.livechance.filter.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
filter 类如下:
package com.livechance.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.HttpServlet;
public class EncodingFilter extends HttpServlet implements Filter
{
private FilterConfig config = null;
private String targetEncoding = "GBK";
public void init(FilterConfig filterConfig)
{
this.config = filterConfig;
this.targetEncoding = config.getInitParameter("encoding");
}
public void destroy()
{
config = null;
targetEncoding = null;
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain)
{
ServletRequest request = (ServletRequest) servletRequest;
try
{
request.setCharacterEncoding(targetEncoding);
filterChain.doFilter(servletRequest, servletResponse);
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
}
2.。页面有中文的时候:
解决办法:servlet; response.setContentType("text/html;harset=GBK");
JSP中:<%#@ page contentType="text/html;charset=gb2312"%>
注意:一定要写在PrintWriter out=response.getWriter();之前