get方式傳參的中文亂碼的解決方案

2021-08-24 21:38:36 字數 976 閱讀 8423

假設

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