Java Servlets response.sendRedirect(字符串url)不';t似乎发送了编码,为什么?

Java Servlets response.sendRedirect(字符串url)不';t似乎发送了编码,为什么?,java,encoding,servlets,redirect,Java,Encoding,Servlets,Redirect,我有一个Servlet,它明确地设置了字符编码并重定向到某个Servlet class Servlet1 extends HttpServle{ void doGet(..... ){ // ... request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"): //...... response.redirect(s

我有一个Servlet,它明确地设置了字符编码并重定向到某个Servlet

class Servlet1 extends HttpServle{
   void doGet(..... ){
        // ...
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8"):
        //......
        response.redirect(servlet2);
    }
}

class Servlet2 extends HttpServle{
   void doGet(..... ){
        // ...
        request.getCharacterEncoding();  // prints null ?? why???
        //......

    }
}

那么,为什么不将字符编码与请求一起发送?

HttpServletResponse#setCharacterEncoding()设置当前响应的编码,而不是后续请求的编码。客户也没有责任在后续请求中将其传回。如果没有客户机的交互,您试图实现的目标是不可能的,在这种情况下不需要这样做。要获得所需的内容,客户端必须使用
charset
属性本身设置HTTP头。使用HTTP标头调试器工具(如)进行检查,您会发现请求中没有该工具。

谢谢BalusC,您将我转发给了这个好工具(FireBug),它确实很有用。那么,在将响应重定向回新URL之前,如何告诉客户机(从Servlet代码)设置字符集呢?正如你所知道的,不要做你不能做的事。否则我会在这里和相关问题中回答这个问题。只需设置响应内容类型。客户端将使用它。然而,我对使用GB2312提出了疑问,我个人更喜欢UTF-8,因为它得到了更广泛的支持,并且具有更好的字符覆盖率。当然,这取决于你的听众。如果您只针对GB2312用户,那么它应该可以正常工作。关于GB2312,这只是用户需求!!啊好的。我将牢记这一点,并避免就您将来涉及GB2312;)的问题对此发表评论