1. 程式人生 > >jsp頁面get中文傳值ie瀏覽器亂碼的問題總結

jsp頁面get中文傳值ie瀏覽器亂碼的問題總結

這兩天真是快被ie給折磨瘋了~真想抓住微軟的工程師問問為啥偏偏這麼愛獨樹一幟!!!哎~~獲取就是牛人的傲嬌吧~~話不多說~~下面說說解決過程與方法給大家分享下。

一開始用chrome瀏覽器除錯時,發現get傳值後亂碼,於是去網上尋找解決方案,找到了這種方法:

String planName=request.getParameter("planName");
String planName1 = new String(planName.getBytes("iso8859-1"),"utf-8");
這樣的話在chrome瀏覽器上是好的~~但是到ie上時,卻發現還是亂碼。上面的寫法並不管用~~於是繼續去尋找解決方法~~找到了第二種方法:

因為我們用的伺服器是tomcat,所以網上有方法說是:在Tomcat的server.xml檔案Connector標籤中加入URIEncoding= "UTF-8"。



如圖加上以後又重啟了下tomcat試了下並沒有什麼用,ie依舊頑強的給我們顯示亂碼~~膩害膩害!無奈之下又迴歸度孃的懷抱中去了,發現了ie死活顯示亂碼而其他瀏覽器正常的原因了:

那就是無論網頁使用什麼字符集,IE傳送給伺服器的總是“planName=%B4%BA%BD%DA”,而Firefox傳送給伺服器的總是“planName=%E6%98%A5%E8%8A%82”。也就是說,在Ajax呼叫中,IE總是採用GB2312編碼(作業系統的預設編碼),而Firefox總是採用utf-8編碼。所以不管是第一種還是第二種在ie下始終是以gb2312的編碼方式解碼utf-8~~怎麼可能不亂碼。。。

知道問題的原因後就好解決了~~在網上找到了第三種解決方案~~那就是javascript函式encodeURl()來進行轉碼。

它著眼於對整個URL進行編碼,因此除了常見的符號以外,對其他一些在網址中有特殊含義的符號“; / ? : @ & = + $ , #”,

也不進行編碼。編碼後,它輸出符號的utf-8形式,並且在每個位元組前加上%;它對應的解碼函式是decodeURI()。 它對應的解碼函式是decodeURI()。而且要注意他不會對單引號進行編碼~~寫法如下:

js頁面:

PayMentOrderDealTask.jsp頁面接值方法如下:

String planName=request.getParameter("planName");
然後在ie上測試了一下~大功告成~~;
最後還有一點要注意的是:如果使用第三種方法的話記得在server.xml裡的Connector標籤上加上URIEncoding="utf-8",否則的話jsp頁面接到的值還是個亂碼~~不過可以在jsp接值頁面把接值的方法換成:String planName1 = new String(planName.getBytes("iso8859-1"),"utf-8");就可以了~~因為tomcat在預設的狀態下是iso8859-1的編碼。

我記得還有這樣的寫法~~


如上圖是解碼了兩次的寫法,這種寫法的接值方法是這樣寫的:String planName2 = java.net.URLDecoder.decode(request.getParameter("planName"),"UTF-8");,對於這種寫法的解釋可以去這裡來看:http://blog.csdn.net/howlaa/article/details/12834595,不怎麼推薦這一種~~

最後再說說為什麼用encodeURI可以解決ie下的亂碼~~因為各個瀏覽器使用的編碼是ASCII碼,不同的編碼對應的ASCII碼是不同的~~上面說過ie只會預設gb2312來解碼~~但是我們頁面的編碼都是utf-8~~這樣就會出現相容性的問題了~~但是如果使用javascript函式encodeURI()來編碼的話,他會把中文轉換為Unicode值,索性在這一點上各個瀏覽器是相同的~~所以可以使用這種方法來解決。。。哎~~這ie,心累。