大家都知道,xmlhttp在通信時采用的是utf編碼,而國內(nèi)很多網(wǎng)頁的信息都是采用gbk編碼,所以當(dāng)直接通過ajax去連接網(wǎng)頁,并將獲取到的信息直接顯示的話就會出現(xiàn)亂碼的現(xiàn)象,有些時候無法改變服務(wù)器端網(wǎng)頁的編碼(例如獲取別的網(wǎng)站的天氣預(yù)報信息),在這種時候就只能在客戶端通過js做編碼的工作了,下面這段js就是用于將服務(wù)器端返回的gbk編碼字符串轉(zhuǎn)換為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("%"));??
}這段代碼也是從網(wǎng)上搜到的,具體是誰寫的不清楚,所以在此未標(biāo)明作者,如作者看到還請見諒。
有了這段代碼后,就可以直接對返回的網(wǎng)頁內(nèi)容進(jìn)行編碼了:
var response=gb2utf8(response.responseBody);
經(jīng)過這樣的轉(zhuǎn)碼后所獲得的頁面內(nèi)容就不會有亂碼現(xiàn)象了;
當(dāng)然,如果服務(wù)器端頁面采用的是utf-8的編碼那就根本不需要進(jìn)行編碼工作了。