6

次のようにサーバーからバイナリ文字列を書き込んでいます。

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 はgetCharCode読み取りに at を使用しUint、より大きい値ごとに 65533 を返します。

jsで値を取得するにはどうすればよいですか?

4

1 に答える 1

1

(PHPファイルによって)送信されたヘッダーを次のように変更すると、問題なく動作します...

header('Content-Type: text/plain; charset=x-user-defined')

このヘッダー (および XHR 応答の処理方法の微調整。この記事ではそのプロセスについて詳しく説明します) がないと、text値が台無しになります: すべての「無効な」(> 127) 文字は文字どおり 1 に置き換えられ'\uFFFD'ます。

もちろん、これらの文字から元の値を抽出することはできないため、私の意見では、jDataView のバグではありません。

于 2012-09-13T15:22:57.207 に答える