来自 php 的 echo char(128) 及更高版本不起作用

echo char(128) and above from php does not work

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

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

在客户端,我有一个 java 脚本(html 页面中的 运行 使用 UTF-8 编码)发布到 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++ 程序员,顺便说一句,这让我很困惑!

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

如果你想解析 raw bytes in JavaScript, you'll want to look into the ArrayBuffer. Once you receive your data, you can compose a 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();