1. 程式人生 > >AJAX中文亂碼總結

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被提交之前. 

轉載自:http://xbcxs.iteye.com/blog/800557