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

Openpyxl Unicode解码错误:无法移除单元格值中的\ufeff

解决Excel单元格Unicode值中的\ufeff(BOM)字符问题

我太懂这种被隐形Unicode字符坑的感觉了!你看到的\ufeff其实是UTF-8字节顺序标记(BOM),Excel在保存带Unicode内容的文件时经常会自动加上这个标记,结果读取到字符串里就变成了这个烦人的不可见字符。

给你几种简单高效的解决办法:


方法1:直接去除字符串开头的BOM字符

BOM几乎只会出现在字符串的起始位置,用lstrip()精准去掉开头的标记是最安全的方式。修改你的代码如下:

for key in shtDict:
    sht = wb[key]
    for row in sht.iter_rows('A:A', row_offset=1):
        for cell in row:
            if isinstance(cell.value, unicode):
                if "INC" in cell.value:
                    # 移除开头的BOM字符
                    cleaned_value = cell.value.lstrip('\ufeff')
                    shtDict[key] = cleaned_value

方法2:全局替换所有BOM字符(极端情况备用)

如果遇到BOM出现在字符串中间的特殊场景(非常少见),可以用replace()全局清除:

cleaned_value = cell.value.replace('\ufeff', '')

方法3:读取文件时提前处理BOM

如果你是手动读取Excel文件,也可以在打开阶段就处理BOM。比如用codecs模块指定utf-8-sig编码(该编码会自动忽略BOM标记):

import codecs
from openpyxl import load_workbook

with codecs.open('你的文件.xlsx', 'r', encoding='utf-8-sig') as f:
    wb = load_workbook(f)

修改后你的字典输出应该就会变成预期的样子:

{'60071508': 'Reason: INC8595939', '60074426': 'Reason. Ref INC8610481', ...}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:43:43