解決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的編碼那就根本不需要進行編碼工作了。

相關文章

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.