Ошибка декодирования Unicode в Openpyxl не может удалить \ ufeff из значения ячейки - PullRequest
0 голосов
/ 26 апреля 2018

Я анализирую несколько листов данных 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'}

Я попытался правильно декодировать данные на основе u '\ ufeff' в строке Python , изменив последнюю строку на:

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', но я получаю ту же ошибку. Кто-нибудь может помочь с этим?

1 Ответ

0 голосов
/ 26 апреля 2018

Просто упростите: вы можете игнорировать BOF, поэтому просто игнорируйте символы BOF.

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

Примечание: cell.value - это уже тип Юникода (вы только что проверили его), поэтому вы не можете его декодировать снова.

...