Ajax中文亂碼問題解決方案(servlet)
最近研究ajax,在界面上text中輸入中文,發(fā)送出去后返回亂碼。經(jīng)過一個晚上的測試,以及得到滿意答案,代碼如下:
HTML:
??? ……
??? //實(shí)際上這里的charset=utf-8 也是可以的,因?yàn)樵谥形钠脚_下
??? //用了GB2312
??? <meta http-equiv="Content-Type" content="text/html; charset=GB2312">
JS:
??? 我用了兩個方法提交:GET 和 POST。
??? 在服務(wù)器端要對應(yīng)不同的提交方式轉(zhuǎn)換不同的編碼。
?? ……
??? //要傳遞的參數(shù)
?? 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");
??????? //這個一定要設(shè)置,這里的設(shè)置應(yīng)該跟HTML中的一樣,但是我在這里
??????? //用了 uft-8, 結(jié)果也是一樣。
??????? response.setCharacterEncoding("GB2312");
???? ?
??????? //當(dāng)用POST方法時,一定要設(shè)置成utf-8,否則亂碼
??????? String firstName = new String(request.getParameter("firstName").getBytes("ISO-8859-1"), "utf-8");
??????? //當(dāng)用GET方法時,要設(shè)置成GB2312,否則亂碼。
??????? String lastName = new String(request.getParameter("lastName").getBytes("ISO-8859-1"), "GB2312");
測試結(jié)果:
因?yàn)榻缑嫔蟽蓚€控件firstName 和? lastName都輸入中文。
接收xmlHttp.responseText后,會發(fā)現(xiàn)其中一個為亂碼,一個可以正常顯示中文。
在網(wǎng)上還發(fā)現(xiàn)有人說用:
“老問題了,最簡單的方法是,全部escape后發(fā)送。取回后unescape,絕對沒有編碼問題?!?br />我測試后發(fā)現(xiàn)escape后的東西全部變成null了。不知道有誰成功用過這個方法的,或者還有什么更好的解決亂碼的方法,請拿出來共享一下吧 :)
from: http://www.themore.net/page/7/37/2006_08/detail_407_1.html
HTML:
??? ……
??? //實(shí)際上這里的charset=utf-8 也是可以的,因?yàn)樵谥形钠脚_下
??? //用了GB2312
??? <meta http-equiv="Content-Type" content="text/html; charset=GB2312">
JS:
??? 我用了兩個方法提交:GET 和 POST。
??? 在服務(wù)器端要對應(yīng)不同的提交方式轉(zhuǎn)換不同的編碼。
?? ……
??? //要傳遞的參數(shù)
?? 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");
??????? //這個一定要設(shè)置,這里的設(shè)置應(yīng)該跟HTML中的一樣,但是我在這里
??????? //用了 uft-8, 結(jié)果也是一樣。
??????? response.setCharacterEncoding("GB2312");
???? ?
??????? //當(dāng)用POST方法時,一定要設(shè)置成utf-8,否則亂碼
??????? String firstName = new String(request.getParameter("firstName").getBytes("ISO-8859-1"), "utf-8");
??????? //當(dāng)用GET方法時,要設(shè)置成GB2312,否則亂碼。
??????? String lastName = new String(request.getParameter("lastName").getBytes("ISO-8859-1"), "GB2312");
測試結(jié)果:
因?yàn)榻缑嫔蟽蓚€控件firstName 和? lastName都輸入中文。
接收xmlHttp.responseText后,會發(fā)現(xiàn)其中一個為亂碼,一個可以正常顯示中文。
在網(wǎng)上還發(fā)現(xiàn)有人說用:
“老問題了,最簡單的方法是,全部escape后發(fā)送。取回后unescape,絕對沒有編碼問題?!?br />我測試后發(fā)現(xiàn)escape后的東西全部變成null了。不知道有誰成功用過這個方法的,或者還有什么更好的解決亂碼的方法,請拿出來共享一下吧 :)
from: http://www.themore.net/page/7/37/2006_08/detail_407_1.html
posted on 2006-12-09 23:06 weidagang2046 閱讀(1177) 評論(0) 編輯 收藏 所屬分類: Java 、Javascript