Java 在ApachePOI中导出到excel时获得问号而不是多个while空格

Java 在ApachePOI中导出到excel时获得问号而不是多个while空格,java,excel,apache,Java,Excel,Apache,我得到的是问号(?)而不是输出excel中的多个空格。我正在使用ApachePOI3.7。对于单个空间,它工作正常 例如:- 如果我的输入是“ab”,那么生成的输出是“ab”。 这里a和b之间有两个空格。这个代码片段工作得很好。 如果仍然存在问题,您能否与自己的代码进行比较并发布一些代码示例 Workbook book = new HSSFWorkbook(); Sheet sheet = book.createSheet(); Row oRow = sheet.cre

我得到的是问号(?)而不是输出excel中的多个空格。我正在使用ApachePOI3.7。对于单个空间,它工作正常

例如:-

如果我的输入是“ab”,那么生成的输出是“ab”。
这里a和b之间有两个空格。

这个代码片段工作得很好。 如果仍然存在问题,您能否与自己的代码进行比较并发布一些代码示例

    Workbook book = new HSSFWorkbook();
    Sheet sheet = book.createSheet();

    Row oRow = sheet.createRow(1);
    Cell oCell = oRow.createCell(1);
    oCell.setCellValue("a  b");

    OutputStream out = new FileOutputStream("c:\\temp\\test.xls");
    book.write(out);
    out.close();

尝试在Microsoft Excel中打开生成的电子表格输出


这是一个编码问题。有时,如果您的输入包含多个空格,则Open office会将您显示为“?”

以供将来参考,这就解决了我的问题。正如Eric所指出的,我们应该首先找出哪些字符代码在制造麻烦,在我的特殊情况下,它们是零

String s = getStringFromSource();
s = s.replace('\u0000', '\u0020'); // check values with dec to hexa first, u0020 means 32
cell.setValue(s);

密码。没有代码,我们怎么能帮上忙?谢谢Eric。我的代码和你提到的一样。输出在Microsoft office中是完美的。只是它给开放式办公室带来了问题。我认为在OpenOffice中编写时可能存在一些编码问题,这就是为什么它显示问号(?)而不是多个空格。我刚刚在OpenOffice v3.4.1中打开了由代码生成的文件,它显示了正确的数据,没有问号。您确定您的代码输出“空格”而不是其他“空白字符”吗?是的。我也尝试过这样做。我用excel打印了一个字符串,它在excel和open office中显示良好。但我的数据来自扫描的PDF,我将扫描的PDF转换为可读的PDF,然后将数据打印到excel。我还分析了调试模式下的数据,但在插入excel时它看起来非常完美。首先,您应该更精确地查看数据。例如:循环字符串中的每个字符,并使用类似“System.out.print((int)ch)”的内容打印数值。您很可能会发现有些空格的编码不是'32'(空格),而是'160'(不间断空格,请参阅)。如果是这种情况,您应该在导出之前将这些字符160替换为常规字符32。请注意,我刚刚测试过,即使是不间断的空格也可以导出到Excel和Open Office(Java字符串“a\u00A0 b”)。。。请将此代码的结果粘贴到“str”字符串上,好吗/******/System.out.print(“Str=[”;for(int i=0;i