1、request.getparameter 中的乱码问题的解决方法
处理方法一:
不知道什么时候开始(好像是在一次重新安装了myeclipse后),我从在java代码中的request.getparameter获取中文参数值的结果变成了乱码,上网搜索了一番,暂时得到这么一个解决方法:
(1)、首先在jsp页面首部添加这么一段:
<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
(2)、那么下一步(jsp或者java)如果从上面这个jsp中获取某一参数时(如companyName),要这么处理:
QuestionaryManager qManager = new QuestionaryManager();
String companyName = (String) request.getParameter("companyName");
String gCompanyName = "";
try {
gCompanyName = new String(companyName.getBytes("ISO-8859-1"), "GBK");//经过zhuanma
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
companyName 是乱码,经过转码处理后,gCompanyName 就是正常字符了。
这样做很笨,很麻烦!增加的代码量可壮观了!并且维护起来麻烦!
处理方法二:
在web.xml里面加过滤器,一劳永逸!
(1)、先添加这么一个转码的类
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public final class CharacterEncodingFilter
implements Filter
{
public CharacterEncodingFilter()
{
System.out.println("==CharacterEncodingFilter==");
encoding = "gb2312";
ignore = false;
}
public void init(FilterConfig config)
{
System.out.println("==init==");
if(config.getInitParameter("encoding") != null)
encoding = config.getInitParameter("encoding");
if(config.getInitParameter("ignore") != null)
ignore = (new Boolean(config.getInitParameter("ignore"))).booleanValue();
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
{
System.out.println("==doFilter==");
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
if(!ignore)
{
req.setCharacterEncoding(encoding);
// res.setCharacterEncoding(encoding);
}
chain.doFilter(request, response);
}
public void destroy()
{
}
private String encoding;
private boolean ignore;
}
(2)、在web.xml里面添加过滤器filter:
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>CharacterEncodingFilter</filter-class> //这是上面那个类的包路径和类名
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>*.do</url-pattern> //过滤所有.do文件
</filter-mapping>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>*.jsp</url-pattern> //过滤所有.jsp文件
</filter-mapping>
这样,所有的request.getparameter都会经过这个过滤器处理,乱码问题就没有了,而且可以任意修改<param-value>GBK</param-value>,想怎么encodeing,就怎么encoding!
2、在myeclipse中查看jsp文件的时候,jsp中的中文无法正常显示,乱码!!
在myeclipse中右键点击jsp文件,选择properties,在text file encoding中选择Other,在下拉框中输入GBK,然后Apply——〉OK,搞定!
一直都没想过这个下拉列表可以输入东西,只想下拉列表中没有GBK,选不上这项,没想到可以自己输进去,汗,折腾了许久呢!!