AJAX中文亂碼總結

1.發送路徑中的參數有中文,在服務器段接收參數值是亂碼

解決辦法:前端(客戶端)兩次編碼,後端(服務器)一次解碼!

前端:

var url="index.jsp?test=來自前臺我不是亂碼"

url=encodeURI(url);

url=encodeURI(url); //兩次編碼

XMLHTTP.open ("post",url,true);

後端:

String name = arg0.getParameter("test");

name = java.net.URLDecoder.decode(name, "UTF-8");//一次解碼

System.out.println("前臺傳過來的參數:" + name);//輸出結果:來自前臺我不是亂碼

 

2.返回來的responseTextresponseXML的值中含有中文是亂碼

解決辦法:在後端指定發送數據的格式!

後端:

response.setContentType("text/xml;charset=UTF-8"); //這行放在流輸出前纔好使

PrintWriter out = arg1.getWriter();

String info = "來自後臺我不是亂碼";

out.println(info);

前端:

var backInfo = XMLHttpReq.responseText;//後臺返回的信息

alert(backInfo);//結果:來自後臺我不是亂碼

 

3.總結

1) Ajax提交數據的格式默認爲utf-8,利用javascript的提供的encodeURI()方法兩次編碼.在服務器端接收的時候要使用java.net.URLDecoder.decode("","UTF-8")方法解碼一次.

2) AJAX在接收responseTextresponseXML的值的時候是按照UTF-8的格式來解碼的,所以服務器要向客戶端發送數據的時候,也要採用utf-8編碼, response.setContentType("text/xml;charset=UTF-8").

3)如果上述方法仍然解決不了亂碼問題,那你嘗試一下把jsp,htm,java文件用UTF-8編碼格式保存.總之,前後臺數據交互都採用utf-8編碼就行了.

 

4.對轉碼用的一些方法的解釋

1)Js方法encodeURI

代碼如下:

var uri="my test.asp?name=stale&car=saab";

document.write(encodeURI(uri));

上面的輸出如下:

my%20test.asp?name=st%C3%A5le&car=saab

 

2) Js方法encodeURIComponent

代碼如下:

var uri="http://jb51.net/my test.asp?name=stale&car=saab";

document.write(encodeURIComponent(uri));

上面的輸出如下:

http%3A%2F%2Fjb51.net%2Fmy%20test.asp%3Fname%3Dst%C3%A5le%26car%3Dsaab

 

3)java方法

java.net.URLDecoder

public static String decode(String s,String enc) throws UnsupportedEncodingException

使用指定的編碼機制對 application/x-www-form-urlencoded 字符串解碼。給定的編碼用於確定任何 "%xy" 格式的連續序列表示的字符。

注:World Wide Web Consortium Recommendation 聲明應使用 UTF-8。如果不使用該編碼,可能造成不兼容性。

4)java方法

java.net.URLEncoder

public static String encode(String s, String enc) throws UnsupportedEncodingException

使用指定的編碼機制將字符串轉換爲 application/x-www-form-urlencoded 格式。該方法使用提供的編碼機制獲取不安全字符的字節。

注:World Wide Web Consortium Recommendation 聲明應使用 UTF-8。如果不使用該編碼,可能造成不兼容性。

5)

1.request.setCharacterEncoding("GBK")是設置從request中取得的值或從數據庫中取出的值response.setContentType("text/html;charset=GBK")是設置頁面中爲中文編碼前者是設置動態文字(參數,數據庫),後者設置頁面靜態文字.

2.response.setContentType指定 HTTP 響應的編碼,同時指定了瀏覽器顯示的編碼,調用此方法,必須在getWriter執行之前或者response被提交之前.

3.response.setCharacterEncoding("GBK")設置HTTP 響應的編碼,如果之前使用response.setContentType設置了編碼格式,則使用response.setCharacterEncoding指定的編碼格式覆蓋之前的設置; response.setCharacterEncodingresponse.setContentType相同的是,調用此方法,必須在getWriter執行之前或者response被提交之前. 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章