request中的亂碼問題

request.setCharacterEncoding(charset);必須寫在第一次使用request.getParameter()之前,這樣才能保證參數是按照已經設置的字符編碼來獲取。

        response.setCharacterEncoding(charset);必須寫在PrintWriter out = request.getWriter()之前,這樣才能保證out按照已經設置的字符編碼來進行字符輸出。

        通過過濾器,我們可以保證在Servlet或JSP執行之前就設置好了請求和響應的字符編碼。

 

但是這樣並不能完全解決中文亂碼問題:

        對於post請求,無論是“獲取參數環節”還是“輸出環節"都是沒問題的;

        對於get請求,"輸出環節"沒有問題,但是"獲取參數環節"依然出現中文亂碼,所以在輸出時直接將亂碼輸出了。

 

原因是post請求和get請求存放參數位置是不同的:

        post方式參數存放在請求數據包的消息體中。get方式參數存放在請求數據包的請求行的URI字段中,以?開始以param=value&parame2=value2的形式附加在URI字段之後。而request.setCharacterEncoding(charset); 只對消息體中的數據起作用,對於URI字段中的參數不起作用。

        當使用request.setCharacterEncoding(charset);時,只能解決表單方法爲POST的中文亂碼情況,而方法爲GET的依然爲亂碼。

解決GET亂碼:

                String str = request.getParameter("URL後面的變量名");

                byte b[] = str.getBytes("ISO-8859-1");

                str = new String(b);

發佈了16 篇原創文章 · 獲贊 10 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章