javascript - 接收和解释内容类型为应用程序/八位字节流的十六进制数据发送时出错

标签 javascript node.js character-encoding binary azure-mobile-services

我正在尝试将二进制数据发送到 azure 移动服务 API。当我们收到请求并尝试解析数据时,高于 7f 的字节值(即 80、81、90、ff 等)会被不同地解释。例如,如果我们发送了

Sent data    : 67 01 00 00 31 00 31 00 32 00 31 00 00 00 A0 10
Received data: 67 01 00 00 31 00 31 00 32 00 31 00 00 00 ef bf bd 10

这是 curl 命令:

curl --header "Content-Type:application/octet-stream"   -X POST https://x.x.x.x/Api/temp --data-binary @/home/device_data.txt

Nodejs 移动服务脚本片段

exports.post = function(request, response) {

    var  payload=new Buffer(request.body);
    console.log(payload);
}

我怀疑我们的 8 位二进制流被解释为 7 位字符流。有人可以解释一下吗?

最佳答案

request.body 来自 ExpressJS - 在这里阅读:http://expressjs.com/4x/api.html#req.body

你会注意到 request.body 不是请求的主体——它是一个解析的主体。因此,您可能需要显式使用 body-parser 来处理请求。

这里是同一事物的另一个例子:nodejs/express and binary data in POST

同时检查正文解析器:https://github.com/expressjs/body-parser#bodyparserrawoptions

不幸的是,我认为您不能在移动服务案例中设置额外的中间件。你可以做的一件事是将你的应用程序转换到 Azure App Service 移动应用程序——它采用常规的 ExpressJS 应用程序,但通过 SDK 处理身份验证、推送通知和数据访问(参见 https://github.com/Azure/azure-mobile-apps-node 和介绍性博客文章:https://azure.microsoft.com/en-us/blog/announcing-node-for-azure-mobile-apps/)

关于javascript - 接收和解释内容类型为应用程序/八位字节流的十六进制数据发送时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32994768/

相关文章:

javascript - 如何为 Material UI React 添加 RTL 支持

javascript - 如何在 javascript 中交换变量的字节顺序(字节顺序)

javascript - 通过 socket.io 每 10 秒发送一次数据

internet-explorer - IE 中的 HTML 实体和字符集

javascript - 你能在javascript中指定一个引用表达式吗?

javascript - 如何通过许多重复出现的图像来加快页面加载时间?

mysql - Node.js 中的同步 mysql

javascript - 需要时出现 Nodemailer 错误

character-encoding - 人名的所有允许字符是什么?

c++ - MSVC 上的双字节编码 (std::codecvt):无法识别前导字节