大家都知道,xmlhttp在通訊時採用的是utf編碼,而國內很多網頁的資訊都是採用gbk編碼,所以當直接通過ajax去串連網頁,並將擷取到的資訊直接顯示的話就會出現亂碼的現象,有些時候無法改變伺服器端網頁的編碼(例如擷取別的網站的天氣預報資訊),在這種時候就只能在用戶端通過js做編碼的工作了.
下面這段js就是用於將伺服器端返回的gbk編碼字串轉換為utf編碼字串:
function gb2utf8(data){
var glbEncode = [];
gb2utf8_data = data;
execScript("gb2utf8_data = MidB(gb2utf8_data, 1)", "VBScript");
var t=escape(gb2utf8_data).replace(/%u/g,"").replace(/(.{2})(.{2})/g,"%$2%$1").replace(/%([A-Z].)%(.{2})/g,"@$1$2");
t=t.split("@");
var i=0,j=t.length,k;
while(++i<j) {
k=t[i].substring(0,4);
if(!glbEncode[k]) {
gb2utf8_char = eval("0x"+k);
execScript("gb2utf8_char = Chr(gb2utf8_char)", "VBScript");
glbEncode[k]=escape(gb2utf8_char).substring(1,6);
}
t[i]=glbEncode[k]+t[i].substring(4);
}
gb2utf8_data = gb2utf8_char = null;
return unescape(t.join("%")); }
有了這段代碼後,就可以直接對返回的網頁內容進行編碼了:
var response=gb2utf8(response.responseBody);
經過這樣的轉碼後所獲得的頁面內容就不會有亂碼現象了;
當然,如果伺服器端頁面採用的是utf-8的編碼那就根本不需要進行編碼工作了。