You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询:Paho Python MQTT客户端接收订阅消息为何总是带"b"前缀

解决Paho Python MQTT客户端接收消息带"b"前缀的问题

这个问题我碰到过好多次啦,其实原因特别清晰:在Python 3环境下,Paho MQTT客户端默认返回的消息 payload 是bytes类型,而Python打印bytes对象时会自动加上b前缀(比如b'test')——这可不是消息本身自带的,只是Python对bytes类型的显示规则而已。

核心解决方法:把bytes解码成字符串

你只需要在处理消息的时候,对msg.payload调用.decode()方法,指定对应的字符编码(绝大多数场景用UTF-8就足够)。

给你个实际可运行的代码示例:

import paho.mqtt.client as mqtt

def on_message(client, userdata, msg):
    # 将bytes类型的payload解码为UTF-8字符串
    payload_content = msg.payload.decode("utf-8")
    # 现在输出就不会有b前缀了
    print(f"{msg.topic} {payload_content}")

# 初始化客户端并配置回调
client = mqtt.Client()
client.on_message = on_message
client.connect("你的MQTT broker地址", 1883, 60)
client.subscribe("test/temperature")
client.loop_forever()

额外小提示

如果你的消息用了其他编码(比如GBK),记得把decode()里的参数改成对应编码就行。要是担心出现非bytes类型的情况,也可以加个类型判断做兼容:

if isinstance(msg.payload, bytes):
    payload_content = msg.payload.decode("utf-8")
else:
    payload_content = msg.payload  # 兼容已经是字符串的特殊情况

这样处理后,讨厌的b前缀就彻底消失啦!

内容的提问来源于stack exchange,提问作者user9409326

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:04:23