我使用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
答案 0 :(得分:4)
将工作簿编码设置为“latin-1”似乎已达到相同的效果:
wb = xlwt.Workbook(encoding='latin-1')
(之前设定为'UTF-8')
另一个答案在我的情况下不起作用,因为还有其他字段不是字符串。
答案 1 :(得分:-1)
SQL提取似乎是返回使用ascii编码的字符串。您可以使用以下命令将它们转换为unicode:
data = unicode(input_string, 'latin-1')
然后,您可以将它们放入带有xlwt的电子表格中。