struts2中中文自動編碼問題

struts2中,如果使用<s:url>,直接放進地址欄,如果有中文的話,會發生一個自動編碼。那麼我們在後臺如何將這已經編碼的數據解碼出來呢?當然,說的是中文傳輸。

<span style="font-size:14px;"><a href="
     <s:url value='demo.action'>  	
           <s:param name='fileName' value='fileFileName[#fn.getIndex()]'/>  
     </s:url>">點擊我
</a></span>


譬如上面的這段代碼,點擊鏈接,然後發現地址欄出現了一串編碼了的字符串,當然這前提是fileName這裏麪包含了中文。然後,我在後臺進行了解碼。

首先,我用的是String fn = new String(fileName.getBytes("ISO-8859-1"), "utf-8");這種方法來解碼,發現解碼不出來。

於是,我又用了java.net.URLDecoder.decode(fileName,"utf-8");還是解碼不了。

後來我居然用String fn = new String(fileName.getBytes("ISO-8859-1"), "gbk");給搞定了。

問題來了,utf-8和gbk都是中文編碼,爲什麼一個可以,一個又不可以了呢?我查一些資料,我個人猜測,應該這兩種編碼佔用的字節大小的關係。ISO-8859-1屬於單字節編碼,最多能表示的字符範圍是0-255,應用於英文系列。 很明顯,ISO-8859-1編碼表示的字符範圍很窄,無法表示中文字符。但是,由於是單字節編碼,和計算機最基礎的表示單位一致,所以很多時候, 仍舊使用ISO-8859-1編碼來表示。而且在很多協議上,默認使用該編碼。比如,雖然"中文"兩個字不存在ISO-8859-1編碼,以gb2312編碼爲例,應該是"d6d0   cec4"兩個字符,使用ISO-8859-1編碼的時候則將它拆開爲4個字節來表示:"d6 d0 ce c4"(事實上,在進行存儲的時候,也是以字節爲單位處理的)。而如果是UTF編碼,則是6個字節"e4 b8 ad e6 96 87"。很明顯,這種表示方法還需要以另一種編碼爲基礎。


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