posted @ 2008-10-08 15:57 errorfun 閱讀(2248) | 評論 (2) | 編輯 收藏
posted @ 2008-08-14 09:55 errorfun 閱讀(4007) | 評論 (0) | 編輯 收藏
我在之前的一篇文章《struts,ajax亂碼解決方案》中講到ajax提交亂碼的解決方案。這個方案在utf-8的編碼下,不管提交或獲取都沒有變成亂碼,但當你的客戶端是GBK編碼時提交就會出現(xiàn)亂碼(獲取時不會)。BeanSoft 說用encodeURIComponent保險,呵呵,這個不是我沒試過,從一開始我就試過了encodeURIComponent ,escape,encodeURI,但最后出來的結(jié)果都沒我說的那種好。它們使用的結(jié)果如下:
escape? 后提交,getParameter出來的是null,
encodeURI 后提交,和沒使用用的時候是一個樣,
encodeURIComponent? 后提交,包含特殊字符的請求都無法取得正確的值。
使用GBK編碼提交后的數(shù)據(jù)在使用服務(wù)器端用new String( value.getBytes("gbk"), "utf-8")后部分可以恢復(fù)正確的中文,但有一部分無法恢復(fù),這個原因估計是AJAX提交時設(shè)置了編碼為UTF-8,但我字符的實際編碼是GBK,所以在提交用用request.getParameter()獲得的數(shù)據(jù)是用UTF-8的編碼在GBK的字符集中找字符,像我在《struts,ajax亂碼解決方案》中說的那樣,UTF-8的編碼可能有1位2位或3位16進制,如果它這個編碼剛好是2位的話,那在GBK可以找到正確的字符(但并不是正確的),但如果是三位呢?那就慘了,它后面的字符全部就會變成亂碼,比如%6D%51%C5 %E5%23%1C分別表示一個UTF-8編碼的中文字符,那如果在GBK中,就會把它當成三個字符去查找,當然肯定是找不到的,有些找到的也是你讀都讀不出來的。用new String( value.getBytes("gbk"), "utf-8")后就是用GBK的編碼在UTF-8的字符集中查找字符,如果剛好你的字符在UTF-8編碼中全部是2位的話,那就能正確恢復(fù),如果不是的話。。。。。。
現(xiàn)在還沒找到在GBK編碼下比較好的解決方案,但今天看到BeanSoft 的一篇文章《JSP 中 AJAX 的表單提交中文問題的簡單解決方案》說到使用BASE64的方法,這個倒是沒有試過,過兩天放假的時候就試一下,如果成功了就跟大家共享一下。
PS:因為項目用也用到了FILTER,在提交后第一時間會被改變字符編碼,不知道是不是這個增加的亂碼解決的復(fù)雜性,當然我也試過在getParameter之前改變它的編碼回utf-8,但結(jié)果是一樣的。
posted @ 2006-12-30 13:34 errorfun 閱讀(3989) | 評論 (6) | 編輯 收藏
posted @ 2006-12-09 21:24 errorfun 閱讀(3865) | 評論 (12) | 編輯 收藏
posted @ 2006-12-09 14:47 errorfun 閱讀(1509) | 評論 (2) | 編輯 收藏