PrintWriter out=response.getWriter();
......
chain.doFilter(request,wrapper);
....
 String resStr=wrapper.toString();
 resStr=resStr.replaceAll("null", "");    
 System.out.println(resStr);
 out.println(resStr);
后台输出的都是正常的汉字,可生成在页面却都是乱码,好象response应该设置响应头的,忘记了,请教各位

解决方案 »

  1.   

    response.setContentType("text/html;charset=gb2312");
      

  2.   

    response.setContentType("text/html;charset=GBK");
    楼主想必是忘了这条了。
      

  3.   

    PrintWriter out=response.getWriter();
          CharResponseWrapper wrapper=new CharResponseWrapper((HttpServletResponse)response);
           chain.doFilter(request,wrapper);
        //  <%@ page contentType="text/html; charset=GB2312" %>
          
          String resStr=wrapper.toString();
          String newStr="";
       
          newStr=resStr.replaceAll("null", "");  
          
          
       /*   String temp_p = newStr;         byte[] temp_t = temp_p.getBytes("GB2312");
            newStr = new String(temp_t);
            */
          
          
          System.out.println(newStr);    
          response.setContentType("text/html;charset=GB2312"); 
       
          out.println(newStr);
    还是乱码
      

  4.   

    最好是加一个字符转换的过滤类,配置如下web.xml
    <filter>
    <filter-name>Set Character Encoding</filter-name>
    <filter-class>common.util.filter.SetCharacterEncodingFilter</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>/*</url-pattern>
    </filter-mapping>
      

  5.   

    类源码如下:
    package common.util.filter;import javax.servlet.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.UnavailableException;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 { // Conditionally select and set the character encoding to be used
    if (ignore || (request.getCharacterEncoding() == null)) {
    String encoding = selectEncoding(request);
    if (encoding != null)
    request.setCharacterEncoding(encoding);
    } // Pass control on to the next filter
    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);
    }}
      

  6.   

    java.lang.IllegalStateException: getWriter() has already been called for this response