Python如何将字符串中的\n转义为实际换行符传递给其他程序
解决方案
问题原因
- MQTT返回的
msg.payload为bytes类型,直接使用str()转换会保留字节标识与转义符,不会自动解析转义序列 - 你收到的字符串中
\n是字面量形式的转义标识,不是实际的换行符,需要手动处理转换
修复代码
def on_message(client, userdata, msg): # 从服务端收到PUBLISH消息时的回调 # 解码字节内容为字符串,替换字面量\n为实际换行符 payload_str = msg.payload.decode('utf-8').replace(r'\n', '\n') # 若需要同时处理\t、\r等其他标准转义符,可使用以下代码替换上一行 # payload_str = msg.payload.decode('utf-8').encode('utf-8').decode('unicode_escape') print("Message received-> " + msg.topic + " " + payload_str) # 打印收到的消息 subprocess.Popen(["/usr/local/bin/signal-cli", "-u","+12125551212", "send", "-m", payload_str, "+12125551213"])
说明
- 先调用
decode('utf-8')将bytes类型的payload转为普通字符串,避免str()转换带来的多余格式问题 replace(r'\n', '\n')针对你的场景做最小修改,只会转换\n标识,不会误处理其他特殊字符- 若MQTT消息使用非utf-8编码,替换
decode方法内的编码参数即可
内容的提问来源于stack exchange,提问作者Garry Adkins
相关产品推荐
相关产品推荐

