规则引擎转发消息编码问题

环境信息

  • EMQ X 版本:4.3
  • 操作系统及版本:
  • 其他

问题描述

设备上传的hex字节数据通过规则引擎转发到web服务器,但是web这边拿到的字节数据有乱码的问题,如果字节数据超过了128,就会乱码。我在规则引擎配置接口的时候把编码指定为iso-8859-1,后还是有问题。我怀疑是规则引擎发送数据之前已经把payload按照某种编码已经编过码了。我希望web这边能直接接收byte数组,该如何操作呢

配置文件及日志

规则引擎是 SELECT * FROM “notify/#”


发送数据

收到数据

我希望能直接拿到字节数组,而不是字符串的payload

规则引擎中的头并不能影响实际的编码规则,我们更多是把头部规则当作数据传输的形式而非 http 的影响因素。这里 emqx 需要进行 json encode 就会产生字符集编码的问题。我们更推荐使用其他的消息推送方式(比如 infludb mysql 等数据入库)避免产生这种问题。你也可以尝试 exhook 的方式,看能不能解决。

可不可以不用json encode呢 ,或者json encode的编码方式能不能修改,现在固定是utf-8吗。
我看其他问答里面 bin2hexstr(payload) as hexstr 用这种方式转成字符串也可以 ,有没有类似的方法转成字节数组的呢?

bin2hexstr(payload) as hexstr 的方式需要你解码。字节数组最终都会被编码的,因为 http 是明文协议,所以都要被编码处理掉。