最近碰到这样的情况:
所有页面统一用UTF-8编码,一个页面简单的POST提交数据,后台用Servlet接收,在处理之前先
request.setCharacterEncoding("UTF-8");
然后获取参数
String username=request.getParameter("username");
...
System.out.println(username);
System.out.println(new String(username.getBytes('ISO8859-1"),"UTF-8"));
在这样的情况下:
IE提交请求:第一次输出乱码,第二次输出正常
在Firefox提交请求:第一次输出正常,第二次乱码。
最近才碰到这种情况,我简直崩溃了,真是很奇怪。
所有页面统一用UTF-8编码,一个页面简单的POST提交数据,后台用Servlet接收,在处理之前先
request.setCharacterEncoding("UTF-8");
然后获取参数
String username=request.getParameter("username");
...
System.out.println(username);
System.out.println(new String(username.getBytes('ISO8859-1"),"UTF-8"));
在这样的情况下:
IE提交请求:第一次输出乱码,第二次输出正常
在Firefox提交请求:第一次输出正常,第二次乱码。
最近才碰到这种情况,我简直崩溃了,真是很奇怪。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
</body>在此条件下,Servlet接收请求时如果设置了请求数据为UTF-8编码,如:
request.setCharacterEncoding("UTF-8"); 则:
// 下面的代码可以正常显示
System.out.println(username);
// 下面的代码出现乱码
System.out.println(new String(username.getBytes('ISO8859-1"),"UTF-8"));
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;public class EncodingFilter implements Filter
{
// web.xml 中配置的编码
protected String encoding = null;
protected FilterConfig filterConfig = null; public void destroy()
{
this.encoding = null;
this.filterConfig = null;
} public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException
{
// 判断配置文件中的编码方式是否为空。
if (encoding != null)
{
// 对请求进行编码设置
request.setCharacterEncoding(encoding);
}
// 将处理权转交给下一个处理器
chain.doFilter(request, response);
} public void init(FilterConfig filterConfig) throws ServletException
{
this.filterConfig = filterConfig;
// 读取配置文件中设置的编码
this.encoding = filterConfig.getInitParameter("encoding");
}
}
web.xml 配置
<!-- 编码过滤器 -->
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>waytide.filter.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
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;
public class FilterChar 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
arg0.setCharacterEncoding("UTF-8");
arg2.doFilter(arg0, arg1);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
web.xml里面配置下
</welcome-file-list>
<filter>
<filter-name>char</filter-name>
<filter-class>org.filter.FilterChar</filter-class>
</filter>
<filter-mapping>
<filter-name>char</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
你把这句System.out.println(new String(username.getBytes('ISO8859-1"),"UTF-8"));
改成System.out.println(new String(username.getBytes('ISO8859-1"),"gb2312"));
试试
创建工程时,指定工程编码是UTF-8,并且指定JS,JSP,XML的所有编码为UTF-8;
数据库的编码格式也设置为UTF-8。
已经服务器的编码也设置为UTF-8。
一般就不会出现什么问题了。