我正在通过 WebSocket 将二进制数据发送到 Python 应用程序。该二进制数据通过调用 struct.unpack("BH", data")
进行解码,需要一个 4 长字节的对象。
我当前面临的问题是,所有数据都包含重复的反斜杠,即使在 arraybuffer 模式下也是如此,因此长度为 16 个字节。我无法检测到不同的大小,因为它后面附加了数据(与这个问题无关),即使我可以,我也找不到在 Python 中去掉反斜杠的方法。
数据如何发送:
// this.webSocket.binaryType = "arraybuffer";
var message = "\\x05\\x00\\x00\\x00"; // escaping required
var buffer = new Int8Array(message.length);
for (var i = 0; i < message.length; i++) {
buffer[i] = message.charCodeAt(i);
}
this.webSocket.send(buffer.buffer);
相比之下,这就是在 Python 中定义时所述数据的样子:
b'\x05\x00\x00\x00'
这就是收到的消息的样子:
b'\\x05\\x00\\x00\\x00'
此问题的理想解决方案是在 JavaScript 端,因为我无法在不破坏基于 Python 的客户端的情况下真正更改 Python 应用程序的实现。
最佳答案
您应该将消息定义为字节而不是字符串:
var buffer = new Int8Array([5,0,0,0])
this.webSocket.send(buffer.buffer)
关于WebSocket 消息中的 JavaScript 双反斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40141181/