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

