問題一:
今天在做項目時,需要用到Ajax,之前我在用GET方式傳遞中文參數時,只需要在後臺程序中設置頁面編碼爲GB2312即中文能正常顯示,可是這次由於表單項目較多,不適合用GET方式傳遞,只能用POST方式,但發現後臺程序中設置編碼爲GB2312時中文還是顯示的亂碼。經過一番研究問題才最終得到解決。
解決方法:
解決此問題的方法非常簡單,只需要在JS處理參數時用escape()函數處理一下即可,而且不需要再用unescape()解碼,這個方法適合POST和GET方式,具體的Ajax代碼這裏我不例出,這裏給出用escape()函數處理參數時的代碼:
複製代碼 代碼如下:var htmer ="getcode="+escape(getcode)+"&Content="+escape(Content);
通常我們在處理Ajax的時候會在這裏直接獲取參數的值,爲了使中文參數不是亂碼,我們只需要用escape()函數對參數處理下即可。
問題二:
當網站頁面不是utf-8編碼時,ajax提交的中文便會變成亂碼。
解決方法如下:
找到裏的contentType:application/x-www-form-urlencoded,將它改成contentType:application/x-www-form-urlencoded; charset=UTF-8就可以了。
原因:未指定charset時,jquery使用ISO-8859-1,ISO8859-1,通常叫做Latin-1。Latin-1包括了書寫所有西方歐洲語言不可缺少的附加字符。jquery的ajax根本沒有考慮到國際化的問題,而使用了歐洲的字符集,所以傳遞中文時纔會出現亂碼
我很久以前一直在使用Prototype框架。在-GB2312或jsp教程-utf8下都使用過,從來沒遇到有字符編碼的問題。於是將Prototype和JQuery代碼都下載下來打開研究原因。
不同之處在於JQuery默認的contentType:application/x-www-form-urlencoded
而Prototype則是contentType:application/x-www-form-urlencoded; charset=UTF-8
這纔是JQuery正在亂碼的原因,在未指定字符集的時候,是使用ISO-8859-1
ISO8859-1,通常叫做Latin-1。Latin-1包括了書寫所有西方歐洲語言不可缺少的附加字符。
JQuery的Ajax根本沒有考慮到國際化的問題,使用了歐洲的字符集,所以才引起了傳遞中文出現亂碼的問題。
而我們的UTF-8則可以解決這一問題。
最終指需要修改JQuery的`代碼,顯式聲明contentType使用utf-8字符集,即可解決GB2312中文傳遞的問題。
只需要簡單的將JQuery的代碼加以修改,加上charset=UTF-8就可以了,這樣不需要改變改什麼ig或什麼在頁面中改編碼什麼的了,也不需要用escapc(str)再在服務端解碼。英文怎麼傳遞,中文也怎麼傳遞。
這裏給段簡單的代碼測試一下:
頁面代碼:
複製代碼 代碼如下:
function DoAjax(){
$("",{txt:$("#tbox1")()},
function(data){
$("#AjaxResponse")(data);
}
);
}
AjaxTest
處理頁面:
複製代碼 代碼如下:<%@ page="" language="C#" contenttype="text/html" responseencoding="gb2312">
string parms;
void Page_Load(object sender , EventArgs e)
{
parms=Request["txt"];
if (llOrEmpty(parms)){
e("Is Null");
}else{
e(parms);
}
}
此外,由於Ajax的默認漢字編碼是utf-8,因此比較保險的方法是保證所涉及的頁面統一編碼格式爲utf-8。