咨询: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
相关产品推荐
相关产品推荐

