鄧華

          BlogJava 聯系 聚合 管理
            48 Posts :: 0 Stories :: 149 Comments :: 0 Trackbacks
          這回碰到的情況是prototype.js產生的序列化字符串傳遞到后臺后,亂碼的問題。

          環境: prototype-1.4.0.js,gb2312編碼的jsp?,后臺:Linux?2.6.9, resin2., resin的啟動參數加了 -Dfile.encoding=ISO-8859-1


          在網頁提交參數的時候。 用了:

          var?myAjax?=?new?Ajax.Request(url,?{method:?'post',?parameters:?Form.serialize($('converge')),onComplete:?showResponse,onLoaded:doing,onLoading:doing});


          其中Form.serialize($('converge')),是把converge表單中所有的字段,拼成method=xxx&type=sss的形式, 在prototype的函數中,會把key和value分別用encodeURIComponent 來把一個字符串轉成utf-8的URL編碼形式.

          比如,“中文”會被編碼成:%E4%B8%AD%E6%96%87

          但該字符串傳到后臺時,會被識別成亂碼. 用request.getParameter取到的字符串也是亂碼,而不是本身的字符。

          主要原因是%號,如果該串改成%22E4%22B8%22AD%22E6%2296%2287 也是可以識別的.?

          解決方法: 在prototype文件中找到 encodeURIComponent? 這段, 在encodeURIComponent 后,再將該字符串用escape方法再編碼一次。 這時候傳到后臺,用request.getParameter,可以得到編碼后的正確的字符串。即 %E4%B8%AD%E6%96%87 .

          這時,可以用java.net.URLDecoder.decode(keyword,"UTF-8");? 對這個字符串進行解碼,從而得到正確的中文。



          posted on 2006-11-09 09:52 鄧華的碎碎念 閱讀(473) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 长岭县| 毕节市| 博罗县| 勐海县| 青龙| 雅安市| 定远县| 湟源县| 平度市| 许昌县| 新竹市| 顺昌县| 汝城县| 惠水县| 鄂伦春自治旗| 家居| 昔阳县| 抚顺市| 海城市| 凌海市| 黄大仙区| 凤山市| 康乐县| 尼玛县| 桑日县| 公安县| 慈溪市| 东宁县| 台中县| 黄冈市| 化德县| 申扎县| 砀山县| 陕西省| 青岛市| 九龙坡区| 镇宁| 嵊州市| 博兴县| 加查县| 哈巴河县|