使用charset时,为什么有些字节以0xf7为前缀:x-user-defined with XMLHttpRequest?

时间:2011-08-08 18:29:20

标签: javascript xmlhttprequest

我正在尝试使用XMLHttpRequest来下载二进制数据。当我将charset设置为'x-user-defined'以便浏览器不会弄乱数据时,浏览器不会将响应的每个字节设置为UTF-16字符串的低字节;相反,一些字节以0xf7为前缀。我特意尝试在Android WebView中执行此操作,但我相信Firefox也会做同样的事情。

为什么会这样?我正在获得我想要的数据,但我必须&& 0xff对每个字节去掉不需要的0xf7。

2 个答案:

答案 0 :(得分:4)

Mozilla docs中提到了此解决方案,解释来自Marcus Granado(文字不再可用,但请阅读backup from web.archive.org):

  

charset x-user-defined使用UNICODE专用区域   0xF700 - 0xF7ff来映射其范围。

执行& 0xff时,您只需丢弃高位置的字节。

答案 1 :(得分:3)

moraes的回答解释了为什么会发生这种情况,但你不应该再使用x-user-defined,因为现在大多数现代(即非IE)浏览器(包括Firefox stable)都支持ArrayBuffers。请改为:

// after xhr.open()
xhr.responseType = "arraybuffer";

// after xhr load
var buf =
       xhr.responseBody           // XHR2
    || xhr.response               // FF7/Chrome 11-15
    || xhr.mozResponseArrayBuffer // FF5
;
// buf is an ArrayBuffer

查看this gist以获取如何从XHR获取Blob和ArrayBuffers的示例。