0

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

4

2 回答 2

0

这似乎是我正在使用的 JXL 版本的错误。实际上,如果我将 JAR 升级到最新版本,则不会出现问题。

于 2013-04-25T12:41:52.043 回答
0

我遇到了类似的问题,但使用了另一个 java excel api。问题是excel试图变得聪明并为您替换一些字符。在我的例子中,一个例子是excel用一个代表三个点的单个字符替换了三个点'...',它代表了它自己的非标准UTF-8字符集中的三个点。我的框架无法识别它,并且我得到了与您现在得到的类似的未定义字符 (�')。为了解决这个问题,我必须手动编辑所有的 Excel 电子表格,然后它就可以正常工作了。我遇到的最大问题是找到它是哪些字符。我不确定这是否适合您。

于 2013-04-25T09:38:48.837 回答