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

树莓派项目生成result.txt时出现UTF-8编码错误,求排查方案

解决树莓派计算机视觉项目无物体检测时的UTF-8编码错误

问题根源分析

当摄像头未检测到物体时,result.txt出现UTF-8编码错误,核心问题有两个:

  • 打开文件时未显式指定UTF-8编码,树莓派系统默认编码可能与UTF-8不兼容,导致写入时编码冲突
  • 无检测结果时,向原本存储数值的probs列表中追加字符串,破坏了列表类型一致性,后续字符串拼接时易触发隐式编码转换错误

修复后的代码

def CountFreq(li, probs):
    freq = {}
    if len(li) > 0:
        for items in li:
            freq[items] = li.count(items)
            # print(freq)
    if not freq:
        a = "No object detected"
        # 单独处理无检测时的概率文本,不修改原probs列表的类型
        prob_text = "No probabilities"
    else:
        a = str(freq)
        # 将概率列表统一格式化为字符串
        prob_text = ", ".join(str(p) for p in probs)
    
    words = ["Object/s detected: " + a]
    if cv2.waitKey(1) & 0xFF == ord('r'):
        speak(a)
        # 显式指定UTF-8编码打开文件,强制统一编码
        with open("result.txt", "a", encoding="utf-8") as f:
            for word in words:
                f.writelines(f"{word} probability in order {prob_text}\n")

关键修改说明

  • 强制UTF-8编码写入:打开文件时添加encoding="utf-8"参数,彻底避免系统默认编码与UTF-8的冲突
  • 保持类型一致性:不再向原probs列表追加字符串,单独生成概率描述文本,消除类型混合引发的编码问题
  • 优化字符串处理:使用f-string替代传统拼接,简化代码同时降低编码转换出错概率

额外优化建议

  • 可以在visualize函数初始化probs时,提前处理空检测场景,减少CountFreq中的分支逻辑
  • 对所有要写入文件的字符串做编码校验,确保内容符合UTF-8规范

内容的提问来源于stack exchange,提问作者Don'thavetHanswers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:44:56