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

Python 3.10 UDP串口数据提取问题:字节转换与截取失败

解决方法

直接在字节层面处理数据,避免解码整个包含非法UTF-8字节的串,步骤如下:

方法一:定位\r和引号位置提取

# 假设收到的UDP数据为data
data = b'SENDPKT: "STN1" "" "SH/DX\r"\x98\x00'

# 找到\r的字节位置
cr_index = data.index(b'\r')
# 截取\r之前的字节段
before_cr = data[:cr_index]
# 找到最后一个双引号的位置
last_quote_index = before_cr.rindex(b'"')
# 提取目标内容并解码为字符串
target_content = before_cr[last_quote_index + 1:].decode('ascii')

print(target_content)  # 输出: SH/DX

方法二:按双引号分割直接提取

利用数据的格式特点(目标内容被最后一组双引号包裹),直接分割字节串:

data = b'SENDPKT: "STN1" "" "SH/DX\r"\x98\x00'

# 按双引号分割字节串,取倒数第二个元素(即最后一组引号内的内容)
target_bytes = data.split(b'"')[-2]
target_content = target_bytes.decode('ascii')

print(target_content)  # 输出: SH/DX

为什么之前的方法无效

  • .strip('b\r')是字符串操作,且仅移除字符串两端的指定字符,无法截取中间目标内容,对字节串使用时逻辑也不匹配。
  • 直接对整个字节串调用.decode()报错,是因为末尾的\x98不属于UTF-8编码的合法起始字节,只解码目标内容所在的合法ASCII字节段即可避免错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:26:14