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

