在 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)。