mqtt解析应答数据efbfbd乱码

通过mqtt接收回应帧,通过程序判断回应帧字符串编码为UTF-8,但通过UTF-8编码进行解码时,解析结果会出现局部efbfbd情况,解析示例:01031401 1a00 efbfbd 0000 0000 0024 0163 efbfbd efbfbd 0000 00 efbfbd 00330e4d

010 是 connect 包,但是connect 包不是长这样子的。
完整的MQTT CONNECT包应该包含:

  • 固定头
  • 协议名(通常是 “MQTT”)
  • 协议级别
  • 连接标志
  • 保持连接时间
  • 客户端标识符等

比如:

10 11 00 04 4D 51 54 54 04 C2 00 3C 00 06 636C69656E744944
  1. 10: MQTT CONNECT报文的固定头
  • 1 表示报文类型(CONNECT)
  • 0 表示报文标志
  1. 11: 剩余长度(17字节)
  2. 00 04: 协议名长度(4字节)
  3. 4D 51 54 54: 协议名 “MQTT”
  4. 04: 协议级别(MQTT 3.1.1)
  5. C2: 连接标志
  • 1: 用户名标志
  • 1: 密码标志
  • 0: 遗嘱保留
  • 000: 服务质量(QoS)
  • 1: 遗嘱标志
  • 0: 清除会话
  1. 00 3C: 保持连接时间(60秒)
  2. 00 06: 客户端ID长度(6字节)
  3. 636C69656E74494400: 客户端ID “clientID”

这个示例包含了一个基本的MQTT连接报文,包括协议名、协议级别、连接标志和客户端ID.

你可以发一个完整的包来看看么?或者你直接 wireshark 抓包,他可以直接看 mqtt 的解析的。