2012-07-18 67 views
1

我正在使用Python從MSSQL數據庫中使用ODBC連接提取數據。然後,我嘗試使用xlwt將提取的數據放入Excel文件中。使用xlwt在Excel中打印來自SQL的Unicode字符

然而,這產生了以下錯誤:

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

您稱之爲工作表編碼的是xlwt用來對傳入的str對象進行DE編碼的編碼。缺省值是'ascii'。你的錯誤信息與「被設置爲UTF-8」不一致。請編輯您的問題以顯示與錯誤消息關聯的回溯。 – 2012-07-22 22:54:11

+0

所以錯誤信息改變了。也許你錯了最初使用的編碼。無論如何:你沒有latin1。根據您的語言環境,使用cp1252或類似軟件。甚至更好:說服pyODBC提供所有文本輸出爲Python'unicode'對象。 – 2012-07-24 12:23:26

+0

是的 - 最上面的一個是空白的(所以默認ascii),第二個是使用UTF-8,我肯定有點糊塗。感謝您的幫助 - 我會看看pyODBC /一種不同的方法。 – RowerAl 2012-07-24 12:41:14

回答

-1

的SQL提取似乎返回用ASCII編碼字符串。您可以將他們轉換爲Unicode:

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

然後你可以把它們與xlwt電子表格。

4

工作簿中編碼設置爲 'Latin-1的' 似乎都達到了相同的:

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

(它的成立 'UTF-8' 前的)

對方回答沒有在我的情況下工作,因爲有其他字段不是字符串。