weidagang2046的專欄

          物格而后知致
          隨筆 - 8, 文章 - 409, 評論 - 101, 引用 - 0
          數據加載中……

          Ajax中文亂碼問題解決方案(servlet)

          最近研究ajax,在界面上text中輸入中文,發送出去后返回亂碼。經過一個晚上的測試,以及得到滿意答案,代碼如下:

          HTML:
          ??? ……
          ??? //實際上這里的charset=utf-8 也是可以的,因為在中文平臺下
          ??? //用了GB2312
          ??? <meta http-equiv="Content-Type" content="text/html; charset=GB2312">

          JS:
          ??? 我用了兩個方法提交:GET 和 POST。
          ??? 在服務器端要對應不同的提交方式轉換不同的編碼。

          ?? ……
          ??? //要傳遞的參數
          ?? var queryString = "firstName=" + firstName + "&lastName=" + lastName
          ????????????????????????? + "&birthday=" + birthday;??? function ?
          ?
          ??? //GET方式提交
          ??? doRequestUsingGET() {
          ??????? createXMLHttpRequest();
          ??????? var url = "GetAndPostExample?" + queryString + "&timeStamp="
          ????????????????????????? + new Date().getTime();
          ??????? xmlHttp.onreadystatechange = handleStateChange;
          ??????? xmlHttp.open("GET", url, true);
          ??????? xmlHttp.send(null);
          ??? }

          ??? //POST方式提交
          ??? function doRequestUsingPOST() {
          ??????? createXMLHttpRequest();
          ??????? var url = "GetAndPostExample?timeStamp=" + new Date().getTime();
          ??????? xmlHttp.open("POST", url, true);
          ??????? xmlHttp.onreadystatechange = handleStateChange;
          ??????? xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
          ??????? xmlHttp.send(queryString);
          ??? }

          servlet:
          ??????? response.setContentType("text/xml");

          ??????? //這個一定要設置,這里的設置應該跟HTML中的一樣,但是我在這里
          ??????? //用了 uft-8, 結果也是一樣。
          ??????? response.setCharacterEncoding("GB2312");
          ???? ?
          ??????? //當用POST方法時,一定要設置成utf-8,否則亂碼
          ??????? String firstName = new String(request.getParameter("firstName").getBytes("ISO-8859-1"), "utf-8");

          ??????? //當用GET方法時,要設置成GB2312,否則亂碼。
          ??????? String lastName = new String(request.getParameter("lastName").getBytes("ISO-8859-1"), "GB2312");

          測試結果:
          因為界面上兩個控件firstName 和? lastName都輸入中文。
          接收xmlHttp.responseText后,會發現其中一個為亂碼,一個可以正常顯示中文。

          在網上還發現有人說用:
          “老問題了,最簡單的方法是,全部escape后發送。取回后unescape,絕對沒有編碼問題。”
          我測試后發現escape后的東西全部變成null了。不知道有誰成功用過這個方法的,或者還有什么更好的解決亂碼的方法,請拿出來共享一下吧 :)

          from: http://www.themore.net/page/7/37/2006_08/detail_407_1.html

          posted on 2006-12-09 23:06 weidagang2046 閱讀(1181) 評論(0)  編輯  收藏 所屬分類: JavaJavascript

          主站蜘蛛池模板: 深圳市| 姜堰市| 榆树市| 海南省| 大城县| 石景山区| 瑞昌市| 亚东县| 宜春市| 防城港市| 大理市| 都兰县| 闸北区| 泰宁县| 宜城市| 尖扎县| 察隅县| 吉木乃县| 睢宁县| 库伦旗| 三江| 洛川县| 红原县| 绵阳市| 井研县| 宜昌市| 乌拉特前旗| 东海县| 旬阳县| 增城市| 元江| 安宁市| 海伦市| 镇康县| 武清区| 颍上县| 于都县| 贵港市| 长宁县| 巧家县| 乌苏市|