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

來源:互聯網
上載者:User

最近研究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了。不知道有誰成功用過這個方法的,或者還有什麼更好的解決亂碼的方法,請拿出來共用一下吧 :)
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.