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

Python串口解码数据存入列表时出现\x00异常字符问题

问题分析与解决

你遇到的\x00是空字节(null byte),属于串口通信中硬件可能附带的不可见控制字符。单独访问列表元素时终端会自动忽略这类不可见字符,但打印整个列表时会输出字符串的原始表示,所以能看到\x00。

解决步骤

1. 清洗通道字符串

在将通道名存入列表前,先去掉空字节和多余的不可见字符,常用方式有三种:

  • 直接移除所有空字节:clean_channel = data_parts[0].replace('\x00', '')
  • 移除首尾的空字节和换行/空格:clean_channel = data_parts[0].strip('\x00 \r\n')
  • 彻底移除所有ASCII控制字符(含空字节、退格等):
    import re
    clean_channel = re.sub(r'[\x00-\x1F\x7F]', '', data_parts[0])
    

2. 修改add_channel代码

把清洗逻辑加入原代码,确保存入列表的是干净的通道名:

def add_channel(self, response):
    data_parts = response.split('=')
    # 先清洗通道名
    clean_channel = data_parts[0].replace('\x00', '').strip()
    if self.channels_detected_list.count(clean_channel) > 0:
        print("Channel already present.")
    else: 
        self.channels_detected_list.append(clean_channel)
        print(self.channels_detected_list)

3. 可选:读取串口时预处理

也可以在读取串口数据时就做初步清洗,避免后续处理带脏数据:

response_line = self.main.serial_port.readline().decode('utf-8').replace('\x00', '').strip()

处理后,列表里的通道名不再包含\x00这类奇怪字符,打印列表和单独访问元素的结果会完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 17:54:52