В файле Excel 97-2003 XLS каждый фрагмент текста кодируется в latin1
, если это возможно, в противном случае UTF-16LE
, с флагом, показывающим, какой именно. Для этого xlwt необходим объект unicode
. Если вызывающая сторона предоставляет объект str
, xlwt попытается декодировать его, используя кодировку, указанную в вызове Workbook () (по умолчанию ascii
).
Это работает; попробуйте запустить следующий короткий скрипт и откройте полученный файл в Excel.
import xlwt
wb = xlwt.Workbook(encoding="UTF-8")
uc = u"".join(unichr(0x0410 + i) for i in xrange(32)) # some Cyrillic characters
u8 = uc.encode("UTF-8")
ws = wb.add_sheet("demo")
ws.write(0, 0, uc)
ws.write(1, 0, u8)
ws.write(2, 0, xlwt.Formula("A1=A2"))
ws.write(3, 0, "ASCII is a subset of UTF-8")
wb.save("xlwt_write_utf8.xls")
Тот факт, что вы получаете ошибку кодирования, а не ошибку декодирования, указывает на возможную проблему в части ввода файла вашего сценария. Пожалуйста, предоставьте максимально короткий скрипт, который вызывает ошибку, которую вы получаете. Сценарий должен содержать что-то вроде print repr(your_utf8_text)
непосредственно перед ошибочным оператором, чтобы мы могли точно видеть, что представляют собой текстовые данные. Пожалуйста, включите полное сообщение об ошибке и полную трассировку, а также содержимое (print repr(contents)
) вашего очень короткого входного файла.