Данные поступают из базы данных, и часто текстовые поля содержат странные символы и это вызывает ошибку IllegalCharacterError. У меня есть решение для этой ситуации: выяснить, какой лист, какая строка и какой столбец вызывает проблему.
Но недавно данные выдали мне такую ошибку:
Код: Выделить всё
ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters
Пример с двумя текстами. Верхний создает ValueError, нижний — IllegalCharacterError.
См. код в сути. stackoverflow не может правильно сохранить приведенный ниже код.
Код: Выделить всё
from openpyxl import Workbook
text = "" # Including three bytes: hexadecimal FFBFBF resulting ValueError
# text = '\x16' # resulting IllegalCharacterError
wb = Workbook()
ws = wb.active
ws.append([text])
wb.save("test.xlsx")
Код: Выделить всё
openpyxl 3.1.2
OS Linux-6.11.5-200.fc40.x86_64-x86_64-with-glibc2.39 (Fedora)
Python 3.12.7 (main, Oct 1 2024, 00:00:00) [GCC 14.2.1 20240912 (Red Hat 14.2.1-3)]
Моя основная проблема здесь в том, что в пандах исключение возникает на разных этапах (to_excel и write.close), и во втором случае я даже не могу получить текст, вызвавший проблему.
Я даже подумал, что мне следует создать проблема с этим на странице github openpyxl. Я думаю, что он должен одинаково решать две проблемы с кодировкой символов, вызывая IllegalCharacterError. Имеет ли это смысл?
Подробнее здесь: https://stackoverflow.com/questions/791 ... n-openpyxl
Мобильная версия