解決ajax擷取頁面直接顯示亂碼的方法

來源:互聯網
上載者:User

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



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。