从Javascript,Ajax,IE访问二进制数据:可以从Javascript(而不是VB)读取responseBody吗?

时间:2010-09-13 21:49:47

标签: javascript ajax internet-explorer xmlhttprequest binary-data

首先,我知道这个问题:

,特别是其中的最佳答案,http://emilsblog.lerch.org/2009/07/javascript-hacks-using-xhr-to-load.html

因此,使用Firefox(以及更高版本的Chrome实际上似乎也可以使用的操作系统)从Javascript访问二进制数据;不了解Opera。到现在为止还挺好。 但我仍然希望找到一种方法来使用现代IE(理想情况下是IE 6,但至少是IE 7+)访问二进制数据,而不使用VB。 有人提到XHR.messageBody不起作用(如果它包含零字节),但我想知道这是否可以用更新版本解决;或者是否有可能允许简单二进制数据访问的备用设置。

对我来说,具体用例是访问使用二进制数据传输格式编码的Web服务返回的数据(包括UTF-8编码中不合法的字节组合)。

4 个答案:

答案 0 :(得分:3)

好的,我找到了一些有趣的线索,虽然还不是完全好的解决方案。

我尝试过的一个显而易见的事情就是玩编码。有两件显而易见的事情确实应该有效:

  • Latin-1(又名ISO-8859-1):它是单字节编码,使用Unicode一对一映射。因此理论上应该足以声明“text / plain; charset = ISO-8859-1”的内容类型并获得每字节字符数。唉,由于浏览器的愚蠢逻辑(以及HTML 5的更多愚蠢的命令!),有一些转码发生,它以奇怪的方式改变了高控制字符范围(代码128-159)。显然这是由于强制性假设编码确实是Windows-1252(为什么?出于某些愚蠢的原因......但它就是它)
  • UCS-2是一个固定长度的2字节编码,早于UTF-17;并简单地将16位字符代码拆分为2个字节。唉,浏览器似乎不支持它。
  • 理论上,UTF-16可能有效,但存在代理对字符(0xD800 - 0xDFFF)的问题。如果包含编码这些字符的字节对,则会发生损坏。

然而:似乎拉丁语-1的转换似乎是可逆的,如果是这样,我打赌我毕竟可以使用它。所有突变都是从1字节(0x00 - 0xFF)到大于字节的值,并且至少对于Firefox没有不明确的映射。如果这适用于其他浏览器,则可以将值映射回来并消除自动转码的不良影响。然后这将适用于多个浏览器,包括IE(需要一些特殊的处理空值的警告)。

最后,一些用于转换数据类型的有用链接是:

答案 1 :(得分:3)

可以使用IE10,使用responseType = arraybuffer或blob。你只需要等待几年......

http://msdn.microsoft.com/en-us/library/ie/br212474%28v=vs.94%29.aspx

http://msdn.microsoft.com/en-us/library/ie/hh673569%28v=vs.85%29.aspx

答案 2 :(得分:2)

您可以使用JScript“VBArray”对象在IE中获取这些字节(不使用VBScript):

var data = new VBArray(xhr.responseBody).toArray();

答案 3 :(得分:1)

我认为答案显然是“不”,根据这篇文章:how do I access XHR responseBody (for binary data) from Javascript in IE?

(或:“使用VBScript帮助”)