杨洋花少卫衣给许晴穿:急,有关jsp表单中的乱码问题

来源:百度文库 编辑:神马品牌网 时间:2024/04/18 17:11:28
本人用jsp+javabean设计一网站,但是网站上从表单上取出中文的话就是乱码,我在页面上已经+了<%request.setCharacterEncoding("GB2312");%>这句语句了,还是会出现乱码,请教是什么地方出了问题,用的jsp服务器是tomcat5.5。

1) 在每个JSP页面开头写<%@ page contentType="text/html;charset=GBK"%>
2) 用以下方法进行转码。
static public String iso2gb(String str) {
if (str != null) {
byte[] tmpbyte=null;
try {
tmpbyte=str.getBytes("ISO8859_1");}
catch (UnsupportedEncodingException e) {
System.out.println(e.getMessage());}
try {
str=new String(tmpbyte,"GBK"); }
catch(UnsupportedEncodingException e) {
System.out.println(e.getMessage());}
}
return str;
}

一个好的方法是在web.xml部署一个中文乱码自动转换过滤器
web.xml
<filter>
<filter-name>CharacterEncoding</filter-name>
<filter-class>com.common.jsp.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>gb2312</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>CharacterEncoding</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

具体javabean
public class CharacterEncodingFilter implements Filter {

private String encoding = null;

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

public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
request.setCharacterEncoding(encoding);
// 保存初始调用的URL,因为forward之后request.getServletPath()会发生改变
HttpServletRequest httpRequest = (HttpServletRequest)request;
httpRequest.getSession().setAttribute("INVOKE_ORIGINAL_URL", httpRequest.getServletPath());
filterChain.doFilter(request, response);
}

public void destroy() {
encoding = null;
}

}