【问题标题】:Character encoding issue while reading an Excel file in a Java Web App在 Java Web App 中读取 Excel 文件时出现字符编码问题
【发布时间】:2013-04-25 08:33:43
【问题描述】:

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

【问题讨论】:

    标签: java linux excel character-encoding struts


    【解决方案1】:

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

    【讨论】:

    • 好的,但是你怎么解释我在 Linux 上遇到了这个问题,而不是在 Windows 上(如果 Excel 有罪)?
    • 好问题,也许这与 Windows 上的默认编码“Windows-1252”(Excel 可能也使用 Windows 特定的编码格式)和 Unix 上的“UTF-8”有关.我在 Mac 上工作,遇到了同样的问题....
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多