1

我正在使用 Python 使用 ODBC 连接从 MSSQL 数据库中提取数据。然后我尝试使用 xlwt 将提取的数据放入 Excel 文件中。

但是,这会产生以下错误:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xd8 in position 20: ordinal not in range(128)

我已经运行脚本来打印数据,并确定数据库中的违规字符是一个带有斜线的 O。在 python 打印上,它显示为“\xd8”。

xlwt 的工作表编码设置为 UTF-8。

有没有办法让这个直接进入Excel?

编辑

完整的错误信息如下:

C:\>python dbtest1.py
Traceback (most recent call last):
  File "dbtest1.py", line 24, in <module>
    ws.write(i,j,item)
  File "build\bdist.win32\egg\xlwt\Worksheet.py", line 1032, in write
  File "build\bdist.win32\egg\xlwt\Row.py", line 240, in write
  File "build\bdist.win32\egg\xlwt\Workbook.py", line 309, in add_str
  File "build\bdist.win32\egg\xlwt\BIFFRecords.py", line 25, in add_str
  File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode 
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xd8 in position 20: invalid
continuation byte
4

2 回答 2

4

将工作簿编码设置为“latin-1”似乎也达到了同样的效果:

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

(之前设置为 'UTF-8')

另一个答案在我的情况下不起作用,因为还有其他字段不是字符串。

于 2012-07-19T09:10:21.270 回答
-1

SQL 提取似乎返回使用 ascii 编码的字符串。您可以使用以下方法将它们转换为 unicode:

data = unicode(input_string, 'latin-1')

然后,您可以使用 xlwt 将它们放入电子表格中。

于 2012-07-18T14:29:05.790 回答