【问题标题】:Character encoding in Excel spreadsheet (and what Java charset to use to decode it)Excel 电子表格中的字符编码(以及用于解码的 Java 字符集)
【发布时间】:2011-09-16 19:07:43
【问题描述】:

我正在使用 JExcel 库来读取 Excel 电子表格。电子表格上的每个单元格都可能包含 44 种语言(英语、葡萄牙语、法语、中文等)中的任何一种的本地化字符串。今天我没有告诉 API 任何关于它应该使用的编码的信息。它处理中文还可以,但它总是搞砸葡萄牙语和德语。不知何故,默认编码(我的开发盒上的 MacRoman,生产上的 UTF-8)无法正确解释它从 excel 工作簿中提取的字符串。 JExcel 解释文件字符编码的方式肯定有问题。

话说回来……

excel工作簿中的所有字符串是否都使用相同的字符集编码?

是否有工作簿元数据我可以问这个字符集是什么(我还没有找到)?

如果我通过 jchardet (http://jchardet.sourceforge.net/) 之类的东西运行所有单元格,是否能够预测整个工作簿的字符编码(这几乎取决于第一个问题是“是的,给定工作簿中的所有字符串都使用相同的字符集编码”)?

这么多问题,这么少时间。

【问题讨论】:

  • 您是在阅读.xls 文件还是.xlsx 文件?
  • 它们是 .xls 文件。 .xlsx 的答案会改变吗?
  • .xlsx 文件实际上只是 XML 文件,这(我会认为)意味着整个文件只有一个编码。另一方面,.xls(我再次认为)是一种二进制格式,所以我不确定每个单元格是否可以有自己的字符编码...
  • 我认为你是对的,马特。 XLS 是一种二进制格式。我在上面的逻辑中也有一个“哦,废话”的时刻; JExcel API 要求我在解析之前设置工作簿编码。我在想我可以解析以找出编码。岩石。硬地。
  • 找到了 XLS 编码规范,感谢维基百科:sc.openoffice.org/excelfileformat.pdf

标签: java excel character-encoding cp1252


【解决方案1】:

好吧,我没有直接得到答案,但马特对规范的发现为实际答案指明了方向:http://sc.openoffice.org/excelfileformat.pdf

与此同时,只需将编码设置为始终为“Cp1252”,我的问题就解决了。我不确定具体原因,但可以这么说,我并不是在寻找礼物马,而是继续前进。

    WorkbookSettings workbookSettings = new WorkbookSettings();
    workbookSettings.setEncoding( "Cp1252" );
    Workbook.getWorkbook( theFile, workbookSettings );

我会打电话给这个回答。

【讨论】:

【解决方案2】:

我的问题是,在从 excel 文件中读取单元格值时,某些值出现了“?”因为这对应于带重音的字母......该代码会解决这个问题吗?因为当我在 Windows 下运行时,我无法像在 Linux 下那样快速测试(这是我要部署到的服务器的 SO)...

【讨论】:

    猜你喜欢
    • 2012-11-09
    • 1970-01-01
    • 2013-11-10
    • 2014-03-12
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    相关资源
    最近更新 更多