首页 > 解决方案 > Openpyxl Unicode 解码错误无法从单元格值中删除 \ufeff

问题描述

我正在解析多个 unicode 数据工作表并为每个工作表中的特定单元格创建一个字典,但我无法解码 unicode 数据。代码的小片段如下

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:
                    shtDict[key] = cell.value

本节的输出是:

{'60071508': u'\ufeffReason: INC8595939', '60074426': u'\ufeffReason. Ref INC8610481', '60071539': u'\ufeffReason: INC8603621'}

我尝试根据Python string 中的 u'\ufeff'正确解码数据,方法是将最后一行更改为:

shtDict[key] = cell.value.decode('utf-8-sig')

但我收到以下错误:

Traceback (most recent call last):
  File "", line 55, in <module>
    shtDict[key] = cell.value.decode('utf-8-sig')
  File "C:\Python27\lib\encodings\utf_8_sig.py", line 22, in decode
    (output, consumed) = codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode character u'\ufeff' in position 0: ordinal not in range(128)

不知道问题是什么,我也尝试过使用“utf-16”进行解码,但我得到了同样的错误。有人能帮忙吗?

标签: unicodeutf-8decodeopenpyxl

解决方案


只是让它更简单:您可以忽略 BOF,所以只需忽略 BOF 字符。

shtDict[key] = cell.value.replace(u'\ufeff', '', 1)

注意:cell.value已经是 unicode 类型(你刚刚检查过),所以你不能再次解码它。


推荐阅读