最近在做一个地图的数据流遇到了问题。就是对方要求采用二进制流的方式把数据发来给我解析。
目前JS中获取二进制的方式都是采用XMLHTTP 。
查到很多的网站已经明确了Ajax是不支持二进制的方式的。我在IE之中试图获取,但是只能获取几个字节就断了。原因是0x0000。二进制当中存在大量的这种数据。众所周知,0x00就是ASCII的结束标志。
在FF中,我们可以使用如下的代码来取得二进制数据流,不会断流:
- //fetches BINARY FILES synchronously using XMLHttpRequest
- load_url = function(url) {
- netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
- var req = new XMLHttpRequest();
- req.open('GET',url,false);
- //XHR binary charset opt by Marcus Granado 2006 [http://mgran.blogspot.com]
- req.overrideMimeType('text/plain; charset=x-user-defined');
- req.send(null);
- if (req.status != 200) return '';
- return req.responseText;
- }
- var filestream = load_url(url);
- var abyte = filestream.charCodeAt(x) & 0xff;
在FF中获取之后,发现数字和字母可以通过a= charCodeAt(i) 来得到Ascii码。然后如果是字母,通过string.fromcharcode(a) 来解析得到内容。
但是这种是Acsii编码方式,不支持中文等其他字符。所以遇到中文即变成乱码。
有人说在IE中通过adodb.stream来获取数据流。但是经过不断的尝试,都不能用脚本创建这个对象。因为浏览器没有权限来创建这个对象。
在此,希望有这方面经验的朋友能给与指点。 谢谢