2

我有一个服务器端 process.php 脚本,它回显两个字符:

echo chr(127);
echo chr(128);

在客户端,我有一个 java 脚本(在 UTF-8 编码的 html 页面中运行),它发布到 php 脚本并期望得到响应:

const xhr = new XMLHttpRequest();
// post xhr to php, check for DONE and 200, and get the response
console.log(xhr.responseText);       

对于 127,我得到的响应是一个字符串,其中一个字符代表 127,正如预期的那样。但是对于 128 及以上,它给了我 3 个字符,-17,-65 -67。梳理和拖网,但没有。很惊讶没有在网上找到任何关于从服务器传输字节到客户端的信息。我是一名桌面 C++ 程序员,顺便说一句,这让我很难过!

4

1 回答 1

1

因为您正在发送字节,所以您需要停止考虑文本和字符。JavaScript 在内部是 UTF-16,您将通过 HTTP 从 PHP 传输文本,从而设置它自己的编码。

如果要在 JavaScript中解析原始字节,则需要查看ArrayBuffer。收到数据后,您可以在其上编写 DataView并获取字节。如果你只有 8 位,你也不应该担心字节顺序。

        const xhr = new XMLHttpRequest();
        xhr
            .addEventListener(
                'load',
                () => {
                    const buffer = xhr.response;
                    const view = new DataView( buffer );
                    const byte = view.getUint8( 0 );
                    console.dir( byte );
                }
            );
        xhr.open( 'GET', '/my/end-point' );
        xhr.responseType = 'arraybuffer';
        xhr.send();
于 2020-08-25T13:40:49.137 回答