JS中頁面跳轉,傳值包含中文時亂碼解決方案

首先,在JS中將要傳遞的中文編碼:encodeURI(encodeURI(value));

然後在跳轉界面中取值時通過以下方式解碼:java.net.URLDecoder.decode(value , "UTF-8");//如果界面都是用UTF-8格式編碼的話。

對於JSP文件和servlet或者JSP之間通過POST方式傳遞中文時,一般在界面head中加上:request.setCharacterEncoding("utf-8");就可以解決大部分的亂碼問題了。

對於POST和GET解決亂碼的總結:

request.setCharacterEncoding("UTF-8"); 是針對form表單Method="POST"提交時起作用。new String(str.getBytes("iso-8859-1"),"UTF-8"); 是針對form表單Method="GET"提交時起作用。 注意: 對於URL傳遞的數據和表單中GET方式提交的數據,在接收頁面中通過設置request.setCharacterEncoding("UTF-8")來解決亂碼問題是不行的,因為在Tomcat5.0以上版本中,默認情況下使用ISO- 8859-1對URL提交的數據和表單中GET方式提交的數據進行重新編解碼. 要解決該問題,應該在Tomcat的配置文件的Connector標籤中設置useBodyEncodingForURI或者 URIEncoding屬性,其中useBodyEncodingForURI參數表示是否用request.setCharacterEncoding 參數對URL提交的數據和表單中GET方式提交的數據進行重新編碼,在默認情況下,該參數為false(Tomcat4.0中該參數默認為true); URIEncoding參數指定對所有GET方式請求(包括URL提交的數據和表單中GET方式提交的數據)進行統一的重新編解碼。 URIEncoding和useBodyEncodingForURI區別是,URIEncoding是對所有GET方式的請求的數據進行統一的重新編解碼,而useBodyEncodingForURI則是根據響應該請求的頁面的request.setCharacterEncoding參數對數據進行的重新編解碼。 所以對於URL提交的數據和表單中GET方式提交的數據,可以修改 URIEncoding參數為瀏覽器編碼或者修改useBodyEncodingForURI為true,並且在獲得數據的JSP頁面中 request.setCharacterEncoding參數設置成瀏覽器編碼。

例如:如果想在GET提交方式上,也可以採用:request.setCharacterEncoding("UTF-8")進行轉碼的話。請將tomcat->conf->server.xml 下面代碼修改如下所示:<Connector port="8080" maxHttpHeaderSize="8192" useBodyEncodingForURI="true" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" />

推薦閱讀:

頁面跳轉亂碼解決之道
瀏覽器亂碼
毫無意義的意義~
字符集及其存儲方式(解決亂碼問題)

TAG:亂碼 | 方案 | 解決方案 | 頁面跳轉 | 中文 | 頁面 |