假設
username='張三';
url="viewdetail.jsp?username="+username
url="viewdetail.jsp?username="+encodeuricomponent(
encodeuricomponent(username))
伺服器通過以下方式獲取值:
username=urldecoder.decode(username,"utf-8");
為什麼需要二次encodeuricomponent 編碼???
首先如果不編碼,那些非英文abc等字元會被瀏覽器按照網頁當前的字符集進行編碼傳到伺服器去, 而伺服器則只會按照伺服器配置的字符集編碼(有預設的好像就是iso***x)進行解碼,所以如果網頁的字符集和伺服器字符集解碼一致那麼就不會出亂碼!
但是往往對於我們來說是不一致的。所以一般情況會出現亂碼, 所以就有人想到用encodeuri來進行編碼再傳送到伺服器,但是要注意encodeuri來編碼是以utf-8來進行編碼的,而伺服器對於url裡面的非abc等字元進行解碼幾乎預設都不是utf-8
所以如果你encodeuri一次的話, 通過request.getparam...而得來的是被伺服器以另外一種(一般是iso...)編碼解碼得到的.所以通過utf-8編碼過後 再通過iso解碼當然獲得的是亂碼, 即使你通過decode(***, 'utf-8')獲取之後的也不對,因為這個過程是 utf-8編碼 ---- iso解碼 ----- utf-8解碼,這個過程當然不對了哦!
而通過兩次編碼再通過兩次解碼為什麼就對了呢, 她是這麼乙個過程 utf-8編碼-utf-8編碼 --- iso解碼 ----utf-8解碼。
在這裡要注意 因為通過第一次utf-8編碼之後的都全是英文本元了,對於英文本元 utf-8編碼 和iso編碼是一樣的效果
所以上面的過程就相當於 utf-8編碼-iso編碼 --- iso解碼 ----utf-8解碼 這樣乙個過程是對稱的當然最後會得到正確的結果了
對於get方式傳參的中文亂碼的解決方案
moviename 風聲 playurl movie 風聲 風聲.rm url play.jsp?moviename moviename playurl playurl url play.jsp?moviename encodeuri encodeuri moviename playurl enco...
終極解決GET方式中文亂碼
想重定向到錯誤提示頁面,並帶上錯誤資訊,實現方式是統一的controller異常處理器,攔截到異常,獲取異常響應型別是rest responsebody 還是頁面,若是頁面,則重定向到統一的錯誤頁面,帶上自定義異常的錯誤資訊,問題來了.若是中文錯誤資訊,在異常處理器中拿redirectattribu...
GET url傳參中文亂碼問題的解決 好用
不想明明 0.1442018.12.21 12 00 34字數 184閱讀 1,180 方法一get方式提交的引數編碼,只支援iso8859 1編碼。因此,如果裡面有中文。在後台就需要轉換編碼 string username request.getparameter username usernam...