2010-05-21 73 views
2

我有一些的Servlet明確地設置字符編碼,並重定向到一些servlet的Servlets response.sendRedirect(String url)似乎沒有發送編碼,爲什麼?

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??? 
     //...... 

    } 
} 

那麼,爲什麼字符編碼不是與發送請求?

回答

2

HttpServletResponse#setCharacterEncoding()設置當前響應的編碼,而不是後續請求。客戶有責任在後續請求上傳回它。如果沒有客戶的互動,你試圖達到的目標是不可能的,在這種情況下不需要這樣做。爲了得到你想要的,客戶端必須設置charset屬性本身的HTTP Content-Type標題。請使用類似Firebug這樣的HTTP頭調試器工具進行檢查,您會發現它在請求中不存在。

+0

感謝BalusC,你實際上已經將我轉發給了這個好工具(FireBug),它確實有幫助。 那麼,我如何告訴客戶端(從Servlet代碼)設置字符集之前重定向迴應新的URL? 如你所知,傾倒http-equiv不這樣做http://stackoverflow.com/questions/2861886/does-a-servlet-knows-the-encoding-of-the-sent-form-that-specified-使用http-equi/2862066#2862066 – 2010-05-21 02:14:07

+1

你不能。否則我會在這裏和相關問題中回答。只需設置響應內容類型。客戶將使用它。然而,我在使用GB2312時加入了問號,我個人更喜歡UTF-8,因爲這得到了更廣泛的支持,並且具有更好的字符覆蓋率。但是,這當然取決於你的觀衆。如果你只針對GB2312的人,那麼它應該沒有問題。 – BalusC 2010-05-21 02:18:47

+0

關於GB2312,這只是用戶要求! – 2010-05-21 02:24:26

相關問題