2010-04-25 125 views
0

我檢索從DB中國文字數據和寫入數據到Excel通過xlwt,
代碼如下:xlwt數據亂碼

ws0.write(0,0, unicode(cell, 'big5')) 

這在Windows下是好的,但是當我deloyed在Linux下,excel中的數據亂碼,
你能幫忙嗎?

回答

0

如果您發佈了您實際運行的代碼,這將有所幫助。假設ws0Worksheet對象,則正確的語法是ws0.write(row_index, column_index, unicode_text)

cell指的是什麼,以及您是如何從數據庫中提取的?

「excel中的數據亂碼」是什麼意思?你在Linux上用什麼來查看XLS文件的內容?你在屏幕上看到了什麼?你能用其他軟件在Linux上正確顯示漢字嗎?

嘗試Linux上的Python交互提示符下鍵入此:

>>> import xlwt 
>>> b = xlwt.Workbook() 
>>> s = b.add_sheet('zh') 
>>> big5_text = '\xa7A\xa6n\xa1I' 
>>> u_text = big5_text.decode('big5') 
>>> s.write(0, 0, u_text) 
>>> b.save('nihao.xls') 

然後嘗試打開與OpenOffice的Calc的XLS文件......你怎麼看?

更新

(1) 「你跑的代碼」 肯定比1線以上;請顯示它。

(2)請運行我給你的一小段代碼,並報告結果。如果可行,我們可以專注於如何從數據庫中獲取數據[請回答這個問題]

(3)請回答在Linux下顯示中文的問題。

(4)考慮到看到「???」而不是中文(或其他)字符通常是由unicode_text.encode('some_encoding', 'replace')(或具有相同意圖的其他代碼)帶有不適當編碼(例如,'ascii')的結果 - 可能在前面有類似的代碼。 xlwt可以用unicode_text.encode()來將你的unicode字符串存儲在文件中;它使用編碼所需的'latin1'或'utf_16le',對下一個arg使用'strict',而不是'replace'。如果Excel顯示「???」,那麼在將數據提供給xlwt之前,數據可能已經出現亂碼。 print repr(cell)告訴你什麼? (5)如果使用相同的輸入數據和相同的Python腳本運行相同版本的xlwt和Python,則Linux的輸出文件應爲相同的字節與Windows的輸出文件的字節對應。 xlwt和Python版本的差異不太可能導致文件的不同。請使用二進制比較(例如,Windows的「命令提示符」窗口中的fc /b ...),比較我給出的短腳本產生的文件。請說明您在每個環境中使用的Python和xlwt的版本。

(6)請考慮切換到the usual forum for xlwt questions ......這樣您可以輕鬆地發送文件以便在需要時查看,並且在發佈新帖子時收到電子郵件,而不必輪詢網站間隔......

+0

其實我把excel作爲linux下的附件發送,在windows下查看附件,它顯示爲??? ,而窗口下生成的文件是可以的。 – 2010-04-25 15:25:07

+0

現在在Linux上輸入這個小腳本並將結果郵寄給Windows。你看到了什麼? – 2010-04-25 15:29:47

+0

我已經運行你的腳本,並沒有問題。 (我使用cx_Oracle從oracle獲取數據) 在窗口中,cx_Oracle是cx_oracle_4.4.1.9i(python 2.5.2,python 2.5 xlwt-0.72,具有完整的10g oracle安裝) ,並且在Linux上是cx_oracle_5.0.3-11g(python 2.4.3,oracle-instantclient11.2-basic-11.2.0.1.0-1.i386) 所以我嘗試用instantclient安裝cx_Oracle for 9i或10g,但是錯誤報告:未定義sysmbol:OCIDB關機 – 2010-04-26 11:47:16