我想从TMX文件中获取压缩层数据。 谁知道的解压gzip和zlib字符串中的javascript库? 我尝试zlib的 ,但它并没有为我工作。 实施例,在TMX文件层数据是:
<data encoding="base64" compression="zlib">
eJztwTEBAAAAwqD1T20JT6AAAHgaCWAAAQ==
</data>
我的JavaScript代码
var base64Data = "eJztwTEBAAAAwqD1T20JT6AAAHgaCWAAAQ==";
var compressData = atob(base64Data);
var inflate = new Zlib.Inflate(compressData);
var output = inflate.decompress();
它运行与显示消息错误“不支持的压缩方法”。 但我尝试在线工具,解压http://i-tools.org/gzip ,它返回正确的字符串。
PAKO是一个完整的和现代Zlib
端口。
这是一个很简单的例子,你可以从那里工作。
获取pako.js ,你可以解压缩的ByteArray像这样:
<html>
<head>
<title>Gunzipping binary gzipped string</title>
<script type="text/javascript" src="pako.js"></script>
<script type="text/javascript">
// Get datastream as Array, for example:
var charData = [31,139,8,0,0,0,0,0,0,3,5,193,219,13,0,16,16,4,192,86,214,151,102,52,33,110,35,66,108,226,60,218,55,147,164,238,24,173,19,143,241,18,85,27,58,203,57,46,29,25,198,34,163,193,247,106,179,134,15,50,167,173,148,48,0,0,0];
// Turn number array into byte-array
var binData = new Uint8Array(charData);
// Pako magic
var data = pako.inflate(binData);
// Convert gunzipped byteArray back to ascii string:
var strData = String.fromCharCode.apply(null, new Uint16Array(data));
// Output to console
console.log(strData);
</script>
</head>
<body>
Open up the developer console.
</body>
</html>
运行例如: http://jsfiddle.net/9yH7M/
另外,您可以将的base64编码阵列在发送前在为数组作为JSON或XML发送时占用了大量的开销。 同样解码:
// Get some base64 encoded binary data from the server. Imagine we got this:
var b64Data = 'H4sIAAAAAAAAAwXB2w0AEBAEwFbWl2Y0IW4jQmziPNo3k6TuGK0Tj/ESVRs6yzkuHRnGIqPB92qzhg8yp62UMAAAAA==';
// Decode base64 (convert ascii to binary)
var strData = atob(b64Data);
// Convert binary string to character-number array
var charData = strData.split('').map(function(x){return x.charCodeAt(0);});
// Turn number array into byte-array
var binData = new Uint8Array(charData);
// Pako magic
var data = pako.inflate(binData);
// Convert gunzipped byteArray back to ascii string:
var strData = String.fromCharCode.apply(null, new Uint16Array(data));
// Output to console
console.log(strData);
运行例如: http://jsfiddle.net/9yH7M/1/
去更高级的,这里是pako
API文档 。
我可以解决我的问题zlib的 。 我解决我的代码如下
var base64Data = "eJztwTEBAAAAwqD1T20JT6AAAHgaCWAAAQ==";
var compressData = atob(base64Data);
var compressData = compressData.split('').map(function(e) {
return e.charCodeAt(0);
});
var inflate = new Zlib.Inflate(compressData);
var output = inflate.decompress();
对于使用Ruby on Rails的,谁愿意压缩编码后的数据发送到浏览器的人,然后通过JavaScript将其解压缩在浏览器上,我结合这两个优秀的答案上面到下面的解决方案。 下面是我的应用程序控制器,压缩,并通过发送@Variable它的浏览器到.html.erb文件之前编码字符串Rails服务器的代码:
require 'zlib'
require 'base64'
def compressor (some_string)
Base64.encode64(Zlib::Deflate.deflate(some_string))
end
这里的JavaScript函数,它采用pako.min.js:
function uncompress(input_field){
base64data = document.getElementById(input_field).innerText;
compressData = atob(base64data);
compressData = compressData.split('').map(function(e) {
return e.charCodeAt(0);
});
binData = new Uint8Array(compressData);
data = pako.inflate(binData);
return String.fromCharCode.apply(null, new Uint16Array(data));
}
下面是该解压缩功能,这要unencode并解压缩存储在隐藏的HTML字段中的数据的JavaScript调用:
my_answer = uncompress('my_hidden_field');
下面是在滑轨的application.js文件中的条目调用pako.min.js,这是在/供应商/资产/ JavaScript的目录:
//= require pako.min
而我得到了pako.min.js从这里文件:
https://github.com/nodeca/pako/tree/master/dist
所有的工作在我的结束,反正! :-)