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 閱讀(1187) 評論(0)  編輯  收藏 所屬分類: JavaJavascript

          主站蜘蛛池模板: 托克托县| 吉木萨尔县| 奈曼旗| 上杭县| 丹阳市| 环江| 丽江市| 壶关县| 吉安县| 重庆市| 通渭县| 昌都县| 叶城县| 科技| 基隆市| 惠水县| 双桥区| 绥江县| 新兴县| 新干县| 禄劝| 牟定县| 蕲春县| 磴口县| 嘉峪关市| 临武县| 铁岭县| 南江县| 盘山县| 陆丰市| 邢台市| 南安市| 商洛市| 乌拉特后旗| 牙克石市| 虞城县| 屯昌县| 达孜县| 马尔康县| 秀山| 乌什县|