當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JS 借助 pako.js 实现网络请求获取 gzip 数据流并解析, 解决汉字乱码
生活随笔
收集整理的這篇文章主要介紹了
JS 借助 pako.js 实现网络请求获取 gzip 数据流并解析, 解决汉字乱码
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1, 下載 pako.js => http://nodeca.github.io/pako/#Deflate.prototype.onData
2, 首先需要了解一下?XMLHttpRequest 2.0 =>?https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest
3, 已 GET 請求為例, 紅色注釋部分為關(guān)鍵步驟
<!DOCTYPE html> <html> <head><meta charset="UTF-8"><title>網(wǎng)絡(luò)請求獲取 GZIP 格式的數(shù)據(jù)流, 并解析</title><script src="../commom/pako.min.js"></script> </head> <body><div id="box" style="font-size: 30px"></div> </body> <script type="text/javascript">var Ajax = (function () {var Utf8ArrayToStr = function(array) { // 數(shù)據(jù)流轉(zhuǎn)化為字符串, 兼容漢字var out = "", i = 0, len = array.length, char1, char2, char3, char4;while(i < len) {char1 = array[i++];// 當(dāng)單個(gè)字節(jié)時(shí), 最大值 '01111111', 最小值 '00000000' 右移四位 07, 00// 當(dāng)兩個(gè)字節(jié)時(shí), 最大值 '11011111', 最小值 '11000000' 右移四位 13, 12// 當(dāng)三個(gè)字節(jié)時(shí), 最大值 '11101111', 最小值 '11100000' 右移四位 14, 14if (char1 >> 4 <= 7) {out += String.fromCharCode(char1);} else if (char1 >> 4 == 12 || char1 >> 4 == 13) {char2 = array[i++];out += String.fromCharCode(((char1 & 0x1F) << 6) | (char2 & 0x3F));} else if (char1 >> 4 == 14) {char2 = array[i++];char3 = array[i++];char4 = ((char1 & 0x0F) << 12) | ((char2 & 0x3F) << 6);out += String.fromCharCode(char4 | ((char3 & 0x3F) << 0));}}return out;};return function (url, json, fn) { // 返回一個(gè)網(wǎng)絡(luò)請求方法var ajax = new XMLHttpRequest(); // 實(shí)例化一個(gè) 網(wǎng)絡(luò)請求url += "?";for(key in json) {url += key + "=" + json[key] + "&";}url = url.substr(0, url.length - 1);ajax.open("get", url, true); // 開啟一個(gè)網(wǎng)絡(luò)請求ajax.responseType = "arraybuffer"; // 聲明返回的是二進(jìn)制數(shù)據(jù)流ajax.onload = function () {if(ajax.response) {var byteArray = new Uint8Array(ajax.response); // 切換數(shù)據(jù)編碼為byteArray = pako.ungzip(byteArray); // 調(diào)用 pako 的方法解壓數(shù)據(jù) fn(Utf8ArrayToStr(byteArray));} else {fn("沒有獲取到任何數(shù)據(jù)");}};ajax.send(null); // 發(fā)起請求 }})();Ajax("../files/gzip.gz", {}, function (ret) {console.log(ret + "1")});Ajax("../files/gzips.gz", {}, function (ret) {console.log(ret + "2")}); </script> </html>?
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的JS 借助 pako.js 实现网络请求获取 gzip 数据流并解析, 解决汉字乱码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 支导线手工和电脑怎么计算方位角并推算坐标
- 下一篇: gradle idea java ssm