Кто-нибудь был в состоянии написать символы UTF-8, используя Python XLWT? - PullRequest
6 голосов
/ 25 августа 2011

Я пытаюсь записать данные в файл Excel, который содержит японские символы.Я использую codec.open () для получения данных, и это, кажется, работает нормально, но я сталкиваюсь с этой ошибкой, когда пытаюсь записать данные:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 16-17: ordinal not in range(128)

Я не понимаю, почемупрограмма будет настаивать на использовании ascii здесь.Когда я создал новый объект рабочей книги, я сделал это, используя

wb = xlwt.Workbook(encoding='utf-8')

, и сам файл программы, и файл, в котором он читается, сохраняются как UTF-8.

У кого-нибудь есть идеи?

РЕДАКТИРОВАТЬ: Вот ссылка на пакет xlwt.http://pypi.python.org/pypi/xlwt

Ответы [ 2 ]

15 голосов
/ 01 сентября 2011

В файле 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)) вашего очень короткого входного файла.

2 голосов
/ 01 августа 2013

Как подсказывает этот вопрос, установка кодировки на Рабочей книге

wb = xlwt.Workbook(encoding='latin-1') 

также должна решить проблему (это сработало для меня).

...