我正在从服务器这样写一个二进制字符串:

header('Content-type: application/octet-stream');
echo $data = pack('C*', 0, 10, 100, 127, 128, 200, 250, 255, 256);

并以这种方式使用js和jDataView lib读取它:
$.get('/get', function(text) {
    var view = new jDataView(text);

    for (var i = 0; i < 20; i++) {
        console.log(i, view.getUint8(i));
    }
});

问题是我只能读取小于128的值。jDataView使用at处的getCharCode来读取Uint,对于每个较大的值,它都返回65533。

如何获取js中的值?

最佳答案

当您使用...更改发送的标题(由PHP文件)时,它的工作原理就很好。
header('Content-Type: text/plain; charset=x-user-defined')
如果没有此 header (以及对XHR响应的处理方式进行了调整; this article详细描述了该过程),那么text值就会变得一团糟:所有'invalid'(> 127)字符都将被'\uFFFD'字符替换。

当然,不可能从这些字符中提取原始值,所以我认为这不是jDataView的错误。

10-02 15:37