用JS解析GBK編碼的中文

背景

在好久遠的VM頁面代碼(2014年的代碼)中進行落數,須要傳一個keyWord(搜索關鍵詞)參數,後端數據中沒有返回,其餘地方也無從獲取,前端考慮從頁面url中獲取,經過通常前端方法進行解析後,並無什麼卵用。javascript

問題剖析

看了下頁面的編碼格式是gbk,返回的是gbk的編碼,這種編碼js是沒法直接解析的,只能建立一個html節點,字符放進去而後取出來應該才能夠。css

問題解決

用script標籤來解析,其實就是須要讓瀏覽器能識別這個gbk編碼,由於js自己沒有gbk編碼轉換的html

代碼

function gbkconvert(gbkStr, callback) {
  var script = document.createElement('script');
  script.id = 'gbkconvert';
  script.src = 'data:text/javascript;charset=gbk,gbkconvertCb("' + gbkStr + '");';
  document.body.appendChild(script);
  window.gbkconvertCb = (res) => {
    callback && callback(res);
  };
}

gbkconvert('%CE%D2%CA%C7gbk%B1%E0%C2%EB',(res) => {
    console.log(res);
})
複製代碼

相關拓展

data類型的Url大體有下面幾種形式。前端

data:,<文本數據>

data:text/plain,<文本數據>

data:text/html,<html代碼>

data:text/html;base64,<base64編碼的html代碼>

data:text/css,<css代碼>

data:text/css;base64,<base64編碼的css代碼>

data:text/javascript,<javascript代碼>

data:text/javascript;base64,<base64編碼的javascript代碼>

data:image/gif;base64,base64編碼的gif圖片數據

data:image/png;base64,base64編碼的png圖片數據

data:image/jpeg;base64,base64編碼的jpeg圖片數據

data:image/x-icon;base64,base64編碼的icon圖片數據
複製代碼

data格式的Url最直接的好處是,這些Url本來會引發一個新的網絡訪問,由於那裏是一個網頁的地址,如今不會有新的網絡訪問了,由於如今這裏是網頁的內 容。這樣作,會減小服務器的負載,固然同時也增長了當前網頁的大小。因此對「小」數據特別有好處。java

相關文章
相關標籤/搜索