【发布时间】:2017-02-23 10:34:08
【问题描述】:
在过去 2 周内,我开始在我的网络应用程序中看到此错误。服务器是 linux redhat,最近没有打补丁。它也已经持续了 44 天。也没有任何 java 或 tomcat 更改或发布(但 tomcat 确实每天被退回一个)。我知道它看起来像是某种字符集/语言环境/编码问题,但我现在不知道为什么它可能已经开始了。它最终与 poi 代码有关。
我正在使用 poi-ooxml-3.10.1.jar,它引入了 xmlbeans-2.6.0.jar。似乎错误是 xmlbeans 初始化时,然后在从其编译模式之一读取 2 字节“修改后的 UTF-8”字符时失败。这就是我到目前为止的地方。为什么这会在受控环境中开始发生,这让我感到困惑。
导致这种情况的代码行
new SXSSFWorkbook(-1);
下面的一些sn-ps:
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:181)
at org.apache.poi.xssf.streaming.SXSSFWorkbook.<init>(SXSSFWorkbook.java:172)
at org.apache.poi.xssf.streaming.SXSSFWorkbook.<init>(SXSSFWorkbook.java:143)
at org.apache.poi.xssf.streaming.SXSSFWorkbook.<init>(SXSSFWorkbook.java:205)
...
Caused by: java.io.UTFDataFormatException: malformed input around byte 88
at java.io.DataInputStream.readUTF(DataInputStream.java:634)
at java.io.DataInputStream.readUTF(DataInputStream.java:564)
at
org.apache.xmlbeans.impl.schema.SchemaTypeSystemImpl$StringPool.readFrom(SchemaTypeSystemImpl.java:1050)
它不能在本地 Windows 机器上重现。
非常感谢您的关注和任何新想法。
【问题讨论】:
-
让我感到困惑的是为什么会调用
readUTF()。writeUTF()格式是 Java 特有的:它与 Microsoft POI 格式没有任何关系。
标签: java apache-poi utf