2013-04-25 58 views
0

Excel文件在Java的Web應用程序,我使用的是JExcel API來讀取客戶發送的Excel文件。字符編碼問題而讀在Java Web應用程序

我在做這樣的事情:

byte[] excelFile = ... 
InputStream inputStream = new ByteArrayInputStream(excelFile); 

WorkbookSettings ws = new WorkbookSettings(); 
ws.setEncoding("CP1252"); 

Workbook w = Workbook.getWorkbook(inputStream, ws); 
... 

的Struts給我的Excel文件的字節數組(我用的是FormFile#getFileData()方法)。

它在Windows確定。然而這在Linux上完全不同。儘管單元格可以被正確解析,並且它們的內容可以被很好地解釋(即使有一些非ASCII字符,比如'à','ê'等等),表格名稱也不會。我遇到一些不好的人物,比如'?'或' '。

我被迫工作簿編碼成UTF-8:

ws.setEncoding("UTF-8"); 

,但沒有什麼效果。

我改變了Excel文件爲UTF-8也沒有任何反應。我真的不明白爲什麼它不起作用,特別是表格名稱,因爲整個鏈是UTF-8(我有一個Servlet過濾器,它強制HTTP請求編碼爲UTF-8)。

回答

0

我也有類似的問題,但與其他Java API脫穎而出。問題在於,excel試圖變得聰明併爲你替換一些角色。在我的例子中,一個例子就是excel將三個點'...'替換爲一個單獨的字符集,這個字符集是非標準的UTF-8。我的框架沒有識別它,並且我得到了類似的未定義字符('')。爲了解決這個問題,我必須手動編輯所有的Excel電子表格,然後才能正常工作。我遇到的最大問題是發現它是哪個字符。我不確定這是否是您的選擇。

+0

沒關係,但你怎麼能解釋我有在Linux上這個問題,而不是在Windows中(如Excel是有罪的)? – mishka 2013-04-25 12:14:04

+0

好問題,也許這是與Windows的默認編碼是「Windows-1252」(一個Windows特有的編碼格式可能也用於Excel),而在Unix上它是「UTF-8」。我在Mac上工作,並有同樣的問題.... – Nos 2013-04-25 12:21:43

0

這似乎是我用JXL版中的錯誤。事實上,如果我將JAR升級到最新版本,則不會發生問題。