請求參數編碼處理的一點注意事項

請求參數編碼處理的一點注意事項


注意

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

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

更優方法

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


另外注意GET請求參數編碼處理

在HttpServletRequest的API文檔中, 對setCharacterEncoding()的說明很清楚:

Overrides thename of the character encoding used in body of this request.

也就是說, 這個方法對於請求Body中的字符編碼纔有作用, 也就是基本上這個方法只對Post產生作用, 當請求使用Get發出時, 則沒有定義這個方法是否會影響Web容器處理編碼的方式(究其原因,是因爲處理URL的是Http服務器,而非Web容器).

若使用Tomcat並採用GET, 或沒有設置setCharacterEncoding(), 且已取得一個請求參數字符串, 另外一個處理編碼的方式, 則是通過String的getByte()指定編碼來取得該字符串的字節數組, 然後再重新構造爲正確編碼的字符串.

例如, 若Browser使用UTF8處理字符, Web容器默認使用ISO-8859-1編碼, 則正確處理編碼的方式爲:

String name = request.getParameter("name");

name = new String(name.getBytes("ISO-8859-1"),"UTF-8");


記於

Jan 4th, 2016
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章