1. 程式人生 > >地址欄url中文亂碼問題

地址欄url中文亂碼問題

應用服務 col pan key 解析 數組 details nbsp sea

參照博文:http://blog.csdn.net/howlaa/article/details/12834595

做視頻的時候,視頻的Url和videoName( 含中文)放在的href中,然後轉向播放頁面,地址欄中的url存在中文編碼問題.

問題:使用了encodeURI對Url進行了一次編碼,依然是中文亂碼。

解決方法:

1.在js中使用encodeURI對url進行雙重編碼。(一定要雙重的,之前用一重的似乎並沒有用)

 var url="<%=basePath%>videoJsp/videoSearch.jsp?key="+search_key;
			 	 url=encodeURI(encodeURI(url));
			 	 window.location.href=url;

  解碼的話同樣需要解碼兩次:

video_name=encodeURI(encodeURI(video_name));

2.在使用java代碼應該也是可以的.

  同樣使用的是java庫中的

借鑒前面的博文,分析原因:

 encodeURI函數主要是對Url老進行轉碼,他默認采用UTF-8的編碼.

 encodeURI編碼的格式是:一個漢字有三個字節組成,每個字節會轉成16進制的編碼,同時會加上%.

假設頁面端輸入的中文是一個“中”,按照下面步驟進行解碼:

  • 1.第一次encodeURI,按照utf-8方式獲取字節數組變成[-28,-72-83],對字節碼數組進行遍歷,把每個字節轉化成對應的16進制數,這樣就變成了[E4,B8,AD],最後變成[%E4,%B8,%AD] 此時已經沒有了多字節字符,全部是單字節字符。
  • 2、第二次encodeURI,進行編碼,會把%看成一個轉義字符,並不編碼%以後字符,會把%編碼成%25.把數組最後變成[%25E4,%25B8,%25AD]然後就把處理後的數據[%25E4,%25B8,%25AD]發往服務器端,當應用服務器調用getParameter方法,getParameter方法會去向應用服務器請求參數,應用服務器最初獲得的就是發送來的[%25E4,%25B8,%25AD],應用服務器會對這個數據進行URLdecode操作,應用服務器進行解碼的這一次,不管是按照UTF-8,還是GBK,還是ISO-8859,,都能得到[%E4,%B8,%AD],因為都會把%25解析成%.並把這個值返回給getParameter方法.
  • 3\、再用UTF-8解碼一次,就得到"中"了,想想看,如果不編碼兩次,當服務器自動解碼的時候,假如是按照ISO-8859去解碼UTF-8編碼的東西,就是會出現亂碼。 

地址欄url中文亂碼問題