我正在尝试使用XMLHttpRequest来下载二进制数据。当我将charset设置为'x-user-defined'以便浏览器不会弄乱数据时,浏览器不会将响应的每个字节设置为UTF-16字符串的低字节;相反,一些字节以0xf7为前缀。我特意尝试在Android WebView中执行此操作,但我相信Firefox也会做同样的事情。
为什么会这样?我正在获得我想要的数据,但我必须&& 0xff
对每个字节去掉不需要的0xf7。
答案 0 :(得分:4)
Mozilla docs中提到了此解决方案,解释来自Marcus Granado(文字不再可用,但请阅读backup from web.archive.org):
charset x-user-defined使用UNICODE专用区域
0xF700
-0xF7ff
来映射其范围。
执行& 0xff
时,您只需丢弃高位置的字节。
答案 1 :(得分:3)
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的示例。