【发布时间】:2019-05-25 13:07:14
【问题描述】:
我正在尝试通过 ZeroMQ(C++ 和 npm zeromq)将数据缓冲区从 JavaScript 应用程序发送到 C++ 应用程序。如果缓冲区包含大于 127 的字节,则数据字节被替换为 3 个字节:
\xEF\xBF\xBD
研究表明,这是 Unicode 替换字符 (U+FFFD) 的 UTF-8 值。
在调用 ZeroMQ send 函数之前,这似乎不会在 JavaScript 中的任何地方发生,并且当我可以通过 ZeroMQ recv 调用在 C++ 端接收数据时,数据已经损坏。
我尝试将 JavaScript 端的缓冲区类型更改为 UintArray 类型,看看是否有任何改变,但没有成功。我不确定还能尝试什么。
有没有办法在不使用npm zeromq 源文件的情况下解决这个问题(我不知道该怎么做,或者我是否愿意)。
更新*消息构建代码示例*
var data = new ProtoData.Data1();
data.setTemp(128); // type is int32
var payload = data.serializeBinary();
var size = payload.length + 4; // 16 bits
var head1 = 4; // 8 bits
var head2 = 4; // 8 bits
var payload_buf = Buffer.from(payload);
// create the header
var header = Buffer.allocUnsafe(4);
header.writeUInt16LE(size, 0);
header.writeUInt8(head1, 2);
header.writeUInt8(head2, 3);
var msg = Buffer.concat([header, payload_buf]);
zmqPubSock.sock.send(msg);
【问题讨论】:
-
您似乎正在使用 JavaScript 文本函数和数据类型处理二进制数据。请出示您的代码。
-
@Tom Blodgey 完成!谢谢
标签: javascript c++ node.js utf-8 zeromq