如何从Opera中的Javascript访问8位二进制数据?

geo*_*zip 0 javascript opera xmlhttprequest xmlhttprequest-level2

这个问题是关于IE到Opera 12浏览器的StackOverflow问题的扩展.

根问题是geoxml3处理kmz(压缩的kml)文件中的问题.

Opera 12中失败的示例

正在使用ZipFile.complete.js的修改版本中的TypedArrays处理二进制数据

传输二进制文件后,在Opera 12中未正确填充Uint8Array,就好像数据被导入为16位元素一样.

请求配置如下:

this.req.responseType = 'arraybuffer';
this.req.overrideMimeType('text/plain; charset=x-user-defined');
Run Code Online (Sandbox Code Playgroud)

返回的值如下处理:

var fileContents = binStream.req.response;
binStream.length = fileContents.byteLength;
binStream.array = new Uint8Array(fileContents);
Run Code Online (Sandbox Code Playgroud)

在Opera 12中,前八个字节的填充如下:

0x004B0050; 给出十进制值4915280

但应该是:

0x4034B50; 小数值67324752.

这在Firefox,Chrome和IE中正常工作(具有解决方法).

有谁知道我怎么能说服Opera 12正确填充Uint8Array?或者一个解决方法,以便它可以工作(某种方式将16位字节数组转换为8位字节数组,尽可能有效地丢弃不需要的高8位)?这是Opera 12中最近实现TypedArray/XmlHttpRequest的已知错误吗?

gsn*_*ers 8

Opera 12.00引入了支持responseType; 不幸的是,它有一个错误,这意味着给定一个text/*MIME类型,你将文件结束为16位字.它在12.01中修复,但最简单的解决方法是将覆盖类型设置为application/octet-stream.(这是CORE-46938,对于那些想要跟踪一个封闭的bug追踪器的人来说.)