无法使用javascript解码平铺的base64数据
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了无法使用javascript解码平铺的base64数据,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2464字,纯文字阅读大概需要4分钟。
内容图文
![无法使用javascript解码平铺的base64数据](/upload/InfoBanner/zyjiaocheng/783/8b25e21dccde452199bd8bcdb1b1d63b.jpg)
我正在使用tiled来创建一个平铺图.
(Tiled是一个瓦片地图编辑器,支持正交和等距地图)
它将地图保存在XML文件中.它可以使用某些编码结构:
>常规base64
> base64 gzip
> base64 zlib
>常规csv
现在,我已经完全放弃了gzip(无论如何我的服务器gzips流量,所以没有损失)
所以我想我会尝试使用a base64 jquery plugin进行常规base64解码
但数据出现乱码,如下所示:
????????????????????????????????????????????????????????
我猜它是二进制编码,但我该如何解决呢?
需要解码的示例数据(常规base64):
jQAAAI4AAACPAAAAkAAAAJEAAACSAAAAkwAAAKEAAACiAAAAowAAAKQAAAClAAAApgAAAKcAAAA=
需要解码的示例数据(gzip base64):
H4sIAAAAAAAACw3DhwnAMAwAMP8P2Rdk9s1KoBQR2WK12R1Ol9vj9fn5A/luZ4Y4AAAA
示例数据为csv:
141,142,143,144,145,146,147,
161,162,163,164,165,166,167
那么如何将常规base64编码位转为csv呢?
编辑:
使用解决方案Pointy发现我得到了一个半正确的数组.
但是,在几千个字符后,2个数字将再次出错.之后甚至更频繁.
然后我找到了一个在他的方案中也使用了tiles和base64编码的人.
解码完阵列后,他也这样做了:
var d = base64_decode($(this).find('data').text());
var e = new Array();
for (var i = 0; i <= d.length; i += 4) {
var f = d[i] | d[i + 1] << 8 | d[i + 2] << 16 | d[i + 3] << 24;
e.push(f)
}
我不知道为什么需要它,但至少它是有效的.
如果有人能解释,请做!
解决方法:
尝试逐个字符地查看返回的字符串.换句话说,为数组中的每个字符获取“charCodeAt”.
function codesFromString(str) {
var rv = [];
for (var i = 0; i < str.length; ++i)
rv.push(str.charCodeAt(i));
}
return rv;
}
这给你留下了一系列数字.如果要将其作为CSV转储到页面或其他内容上,可以使用join()
var csv = codeFromString(decoded).join(',');
编辑 – 好的,这是一个base64数字解码器:
var base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split("");
var base64inv = {};
for (var i = 0; i < base64chars.length; i++) {
base64inv[base64chars[i]] = i;
}
function decodeNumeric(s) {
s = s.replace(new RegExp('[^'+base64chars.join("")+'=]', 'g'), "");
var p = (s.charAt(s.length-1) == '=' ?
(s.charAt(s.length-2) == '=' ? 'AA' : 'A') : "");
var r = [];
s = s.substr(0, s.length - p.length) + p;
for (var c = 0; c < s.length; c += 4) {
var n = (base64inv[s.charAt(c)] << 18) + (base64inv[s.charAt(c+1)] << 12) +
(base64inv[s.charAt(c+2)] << 6) + base64inv[s.charAt(c+3)];
r.push((n >>> 16) & 255);
r.push((n >>> 8) & 255);
r.push(n & 255);
}
return r;
}
这适用于您的示例,但它表明您作为结果写的内容实际上并不正确.而不是“141,142,143,…”它是“141,0,0,0,142,0,0,0,143,0,0,0”等.这就是编码字符串中那些“AAA”的运行.
(代码从http://en.wikibooks.org/wiki/Algorithm_Implementation/Miscellaneous/Base64被盗)
内容总结
以上是互联网集市为您收集整理的无法使用javascript解码平铺的base64数据全部内容,希望文章能够帮你解决无法使用javascript解码平铺的base64数据所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。