今天弄了一天的Ajax中文亂碼問題,Ajax的亂碼問題分為兩種:
1. JavaScript輸出的中文亂碼,
比如:alert("中文亂碼測試");
2. 這第二種就是Ajax從服務器端獲得的數據出現亂碼的問題。(我搜了n個小時試了n中方法才找到答案)
現在將我搜集的比較有效的方法都與大家分享:(我使用的開發環境是Eclipse,相信其他語言和開發環境都差不太多。)
比如
var message = xmlHttp.responseText;
alert("message: "+message);
獲得這個message輸出就是亂碼
解決辦法有兩種:
(1)在jsp文件里引入js文件時可以這樣寫:<script Charset="UTF-8" type="text/javascript" src="jslib/jquery-1.4.2.min.js"></script>,該方法具有移植性
(2)(該方法可能會導致換一臺電腦導入項目后js文件里中文會亂碼). 修改編碼。切記要將代碼備份一下,改了編碼之后中文會變為亂碼。
在js文件上右鍵點擊Properties,最好是在菜單欄欄里選擇Window-->Perferences(以絕后患),修改Text file encode 為UTF-8(這里應當與jsp中的編碼相同)
同樣的將JavaScript source file和JSP的Default encoding設置為UTF-8(這里應當與jsp中的編碼相同,這樣以后的項目就都是utf-8的編碼了,推薦使用這個)
(2). 注意response.setContentType("text/html;charset=utf-8");和PrintWriter out = response.getWriter();的位置關系,切記要將PrintWriter out = response.getWriter();放在response.setContentType("text/html;charset=utf-8");的后面,否則設置的編碼將無效,這也是我弄了n久都搞不定的原因!!!
3. 客戶端發給服務器端得中文數據為亂碼
解決辦法:示例:客戶端的javaScript腳本
function verify(){
$.get("AJAXServer?name="+encodeURI(encodeURI($("#userName").val())),null,function callback(data){$("#result").html(data);});
}
?注意:encodeURI需要使用兩次!
服務器端代碼:
//1.取參數
String str = request.getParameter("name");
str = java.net.URIDecode.decode(str,"UTF-8")