HttpServletResponse.setContentType("text/html;charset=GB2312")之后

我想了解一下,为什么HttpServletResponse.setContentType("text/html;charset=GB2312")之后,在响应页面当中看不到设置的页面编码。代码如下,是写在doGet()方法里。

httpServletResponse.setContentType("text/html;charset=GB2312");
        PrintWriter out = httpServletResponse.getWriter();
        String old = httpServletRequest.getParameter("name");

 

在我看来,的确是在getWriter()之前设置了编码类型,但在响应页面中却看不到相关的代码,并造成浏览器用默认编码解释而形成乱码。

[quote]httpServletResponse.setContentType("text/html;charset=GB2312"); [/quote]

只是设置Respone流的格式和编吗.和页面输入无关.

想在页面输出就手工加入啊

[code="java"]out.println("")[/code]

1.在头加上加
contentType="text/html;charset=GB2312"

servlet代码:
[code="java"]out.println("") [/code]

[code="java"] request.setCharacterEncoding("GB2312"); [/code]

2.推荐加个过滤器时最方便了,只要在web.xml里面设置一下。就不在每个JSP页面里设置了。过滤器可以如下:

[code="java"]
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 SetCharacterEncodingFilter implements Filter {

      protected   String   encoding   =   null;   
      protected   FilterConfig   filterConfig   =   null;   
      protected   boolean   ignore   =   true;   
  public   void   destroy()   {   

              this.encoding   =   null;   
              this.filterConfig   =   null;   

      }   

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain)

throws IOException, ServletException {

              if   (ignore   ||   (request.getCharacterEncoding()   ==   null))   {   
                      String   encoding   =   selectEncoding(request);   
                      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");   
              String   value   =   filterConfig.getInitParameter("ignore");   
              if   (value   ==   null)   
                      this.ignore   =   true;   
              else   if   (value.equalsIgnoreCase("true"))   
                      this.ignore   =   true;   
              else   if   (value.equalsIgnoreCase("yes"))   
                      this.ignore   =   true;   
              else   
                      this.ignore   =   false;   

      }   


      protected   String   selectEncoding(ServletRequest   request)   {   

              return   (this.encoding);   

      }   

}[/code]

再在web.xml里面配置一下

[code="java"]

Set Character Encoding

com.SetCharacterEncodingFilter



encoding

GB2312





Set Character Encoding

/*

[/code] 参数UTF-8随便你配了,GB2312,GBK,自己看着办。只要也JSP上的配置成同一个字符码集就行。很方便的。