當客戶端使用編碼與web容器使用編碼不一致時,便有可能產生亂碼狀況java
例一:網頁編碼使用UTF-8,經過Post方式發出「晴」這個中文字符的參數請求。web容器使用ISO-8859-1處理編碼。web
至關於瀏覽器所作操做:數組
java.net.URLEncoder.encode("晴", "UTF-8");複製代碼
「晴」按照UTF-8編碼爲:%E6%99%B4瀏覽器
則至關於web容器所作操做:bash
java.net.URLDecoder.decode("%E6%99%B4" , "ISO-8859-1");複製代碼
故此會出現請求參數亂碼現象ide
在接受任何請求參數以前,執行如下語句(request爲HttpServletRequest實例化對象):this
request.setCharacterEncoding("UTF-8");
複製代碼
使得容器在接受任何請求參數時,使用UTF-8來處理。便可解決亂碼問題編碼
request.setCharacterEncoding("UTF-8");
複製代碼
以上語句對於Get請求參數亂碼問題並不起做用。spa
why?.net
在API中,該方法有以下說明:
Overrides the name of the character encoding used in the body of this request
該方法只對請求體中的字符編碼起效。故在Get請求時,它並不能解決問題。
依舊針對例一,換做爲Get請求,正確的處理方式如爲:
String name = request.getParameter("name");
name = new String(name.getBytes("ISO-8859-1"),"UTF-8");
複製代碼
首先經過String的getBytes()得到該字符串的字節數組,再從新構造正確編碼的字符串便可。