【发布时间】:2018-08-14 09:28:43
【问题描述】:
我正在尝试将 Unicode 字符写入 Excel 文件。我使用 Unicode 平面 0 成功地做到了,但没有使用 Unicode 平面 1。
我使用 POI 3.16 并使用这段简单的代码进行测试:
public void createFile() throws IOException {
SXSSFWorkbook workbook = new SXSSFWorkbook(1);
SXSSFSheet sheet = workbook.createSheet("data");
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
String value = "????????????ᚬᚬᚬ";
cell.setCellValue(value);
try (FileOutputStream fop = new FileOutputStream("C:\\Users\\Emilien\\PROJECTS_FILES\\BUGS\\SLIMS_14124\\test.xlsx")) {
workbook.write(fop);
} finally {
workbook.dispose();
}
}
在 excel 2016 中,单元格包含“??????ᚬᚬᚬ”,而不是显示“????????????ᚬᚬᚬ”。 在这里 ᚬ 和 ???? 找到有关字符的 URL。
我解压了excel文件,查看了data表的内容,cell对应的XML内容是:
<row r="1">
<c r="A1" t="inlineStr"><is><t>??????ᚬᚬᚬ</t></is></c>
</row>
如我们所见,平面 0 的字符已被转换为 HTML Unicode 字符,而平面 1 的字符已丢失。
如果我改变“??????”经过 ”????????????”在 XML 文件中,然后再次将文件压缩到新的 xlsx 文件中,字符将按需要呈现(意思是,单元格实际上包含????????????ᚬᚬᚬ)。
Java 字符串似乎不是以 UTF-8 格式写入 XML,而是似乎由 POI 处理(我们以 HTML 字符结尾)。有谁之前经历过这个吗 ?是否可以将 SMP 字符写入 Excel 文件?
这可能是一个错误吗?我的意思是,XML 文件在其标头中声明了 UTF-8 编码,但似乎并不尊重它。我错过了什么吗?
<?xml version="1.0" encoding="UTF-8"?>
【问题讨论】:
-
见stackoverflow.com/questions/38007641/…。这是
xmlbeans-2.6.0.jar的问题。使用较新的版本。 -
嘿。我尝试将 xmlbeans-3.0.0 与 POI 3.16 一起使用(通过删除其 2.6.0 依赖项),但它没有解决问题。然后我尝试了 POI 3.17(仍然是 2.6.0),它成功了。
-
似乎在 3.17 中确实已修复。 mirror.easyname.ch/apache/poi/release/RELEASE-NOTES.txt
标签: java excel character-encoding apache-poi