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