大家都知道,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的編碼那就根本不需要進行編碼工作了。