2012-10-02 47 views
0

我想導出和涉及一些多語言(日語)內容的JAVA MS Excel表。我已經嘗試了幾件事情,但多語言(日語)內容在導出的Excel工作表中沒有正確顯示。從多國語言內容的JAVA導出Excel

我拿起從數據庫中的內容(我檢查數據庫,多語言 - 日語內容是否正確保存)

String fileName = "output"+".xls"; 
ExcelExport excelExporter = new ExcelExport(); 
excelExporter.ExportExcel(fileName, ....); // Writing Database Fields to Excel 
File file = new File(fileName); 
int length = 0; 
response.setContentType("application/vnd.ms-excel"); 
response.setContentLength((int) file.length()); 
response.setHeader("Content-Disposition", "attachment; filename=\""+ file.getName() + "\""); 
ServletOutputStream outputStream = response.getOutputStream(); 
byte[] bbuf = new byte[1024]; 
DataInputStream in = new DataInputStream(new FileInputStream(file)); 
while ((in != null) && ((length = in.read(bbuf)) != -1)) 
{ 
    outputStream.write(bbuf, 0, length); 
} 

in.close(); 
outputStream.flush(); 
outputStream.close(); 
file.delete(); 

它的示意圖顯示了編碼我ISO-8859-1(由使用response.getCharacterEncoding();函數),這可能是問題嗎?因爲Excel文件中英語完美,只有多國語言(日語)出現錯誤

+0

您說Excel數據來自數據庫 - 它如何到達文件系統上的文件? – RonK

+0

(Post Updated),Excel數據通過函數excelExporter.ExportExcel()從數據庫填充; – ammar26

+1

究竟出了什麼問題?你可以說得更詳細點嗎? (excel文件是否正常打開?是否有一些/所有單詞出現亂碼? 此外,什麼是「ExcelExporter」?它是第三方嗎? 文件系統上的文件是否有效 - 或者是否已損壞?在測試過程中刪除它) – RonK

回答

0

不要關閉響應的outputStream。此外,使用BufferedInputStream而不是DataInputStream,它更適用於對象。

in != null的測試是沒有必要的。 bbuf尺寸可能更大,比如說4096.

+0

好的,看到其他評論我得出結論,你正在複製的原始文件已經是錯誤的Excel了。如果緊急,你可以說謊,寫一個UTF-8編碼的html文件,並以.xls結尾,Excel將採取這種方式。 –