尝试使用Python xlwt保存Excel文件时出现UnicodeDecodeError

时间:2014-09-11 01:47:56

标签: python excel unicode ascii xlwt

我正在运行一个Python脚本,该脚本将使用BeautifulSoup找到的HTML代码写入Excel电子表格列的多行。

[...]

Col_HTML = 19
w_sheet.write(row_index, Col_HTML, str(HTML_Code))
wb.save(output)

尝试保存文件时,收到以下错误消息:

Traceback (most recent call last):
  File "C:\Users\[..]\src\MYCODE.py", line 201, in <module>
    wb.save(output)
  File "C:\Python27\lib\site-packages\xlwt-0.7.5-py2.7.egg\xlwt\Workbook.py", line 662, in save
    doc.save(filename, self.get_biff_data())
  File "C:\Python27\lib\site-packages\xlwt-0.7.5-py2.7.egg\xlwt\Workbook.py", line 637, in get_biff_data
    shared_str_table   = self.__sst_rec()
  File "C:\Python27\lib\site-packages\xlwt-0.7.5-py2.7.egg\xlwt\Workbook.py", line 599, in __sst_rec
    return self.__sst.get_biff_record()
  File "C:\Python27\lib\site-packages\xlwt-0.7.5-py2.7.egg\xlwt\BIFFRecords.py", line 76, in get_biff_record
    self._add_to_sst(s)
  File "C:\Python27\lib\site-packages\xlwt-0.7.5-py2.7.egg\xlwt\BIFFRecords.py", line 91, in _add_to_sst
    u_str = upack2(s, self.encoding)
  File "C:\Python27\lib\site-packages\xlwt-0.7.5-py2.7.egg\xlwt\UnicodeUtils.py", line 50, in upack2
    us = unicode(s, encoding)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 5181: ordinal not in range(128)

我过去成功编写了Python脚本来编写工作表。这是我第一次尝试将HTML字符串写入单元格时,我想知道导致错误的原因以及我如何解决它。

1 个答案:

答案 0 :(得分:3)

在将HTML_Code传递给w_sheet.write

之前,请先使用此行
HTML_Code = HTML_Code.decode('utf-8')

因为,在错误行UnicodeDecodeError: 'ascii' codec can't decode中,Python正在尝试将unicode解码为ascii,因此您需要使用正确的编码格式解码unicode,即utf-8

所以,你有:

Col_HTML = 19
HTML_Code = HTML_Code.decode('utf-8')
w_sheet.write(row_index, Col_HTML, str(HTML_Code))