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

          主站蜘蛛池模板: 卓资县| 东宁县| 杭锦旗| 临湘市| 合肥市| 七台河市| 陆川县| 芜湖县| 桂平市| 塘沽区| 玉田县| 扬中市| 苏尼特右旗| 刚察县| 阜新市| 怀仁县| 肃南| 元谋县| 彰化市| 郁南县| 丰顺县| 昌邑市| 庆阳市| 镇平县| 黄浦区| 南充市| 桦甸市| 雷州市| 周至县| 抚远县| 平度市| 邛崃市| 旅游| 哈尔滨市| 聂荣县| 大化| 赤城县| 浮梁县| 滕州市| 江都市| 多伦县|