在Java Web应用程序中,我使用JExcel API读取客户端发送的Excel文件。
我正在做这样的事情:
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 :(得分:0)
我有一个类似的问题,但有另一个java excel api。问题是excel试图变得聪明并为您替换一些字符。在我的例子中,这个例子就是excel用一个单个字符代替三个点“......”,代表它自己的字符集中的三个点,这是非标准的UTF-8。我的框架没有识别它,我得到了类似的未定义字符( ')。要解决此问题,我必须手动编辑所有excel电子表格,然后才能正常工作。我遇到的一个大问题是找到它的角色。我不确定这是否适合您。
答案 1 :(得分:0)
这似乎是我正在使用的JXL版本的错误。实际上,如果我将JAR升级到最新版本,则不会出现问题。