Apache POI 异常空白(已解决:\u00A0 不间断空格)
Posted
技术标签:
【中文标题】Apache POI 异常空白(已解决:\\u00A0 不间断空格)【英文标题】:Apache POI Anomalous Whitespace (Resolved: \u00A0 non-breaking space)Apache POI 异常空白(已解决:\u00A0 不间断空格) 【发布时间】:2015-08-18 06:49:55 【问题描述】:编辑:已解决的答案:是 00a0 不间断空间,而不是 c0a0 不间断空间。
使用 Apache POI 将 docx 转换为纯文本,然后将纯文本读入 Java 并尝试解析后,我遇到了以下问题。
输出:
" "
first characterequals SPACE OR TAB
false
[B@5e481248
[B@66d3c617
ARRAYTOSTRING SPACE: [32]
ARRAYTOSTRING ?????: [-62, -96]
代码:
System.out.println("\t\"" + line.substring(0,1) + "\"\n\tfirst characterequals SPACE OR TAB \n\t" + (line.substring(0,1).equals(" ")
|| line.substring(0,1).equals("\t") ));
System.out.println(line.substring(0,1).getBytes());
System.out.println(" ".getBytes());
System.out.println("ARRAYTOSTRING SPACE: " + Arrays.toString(" ".getBytes()));
System.out.println("ARRAYTOSTRING ?????: " + Arrays.toString(line.substring(0,1).getBytes()));
String.trim() 并没有摆脱它 String.replaceAll("\s" , "") 没有摆脱它
我正在尝试解析一个巨大的材料文档,这变成了一个主要障碍。我不知道发生了什么或如何与之交互,有人能解释一下这里发生了什么吗?
【问题讨论】:
您确实应该至少添加一个提取代码的 sn-p。 我不确定提取代码脱离上下文是否有意义,它只是逐行提取,并且此调试 sn-p 正在复制循环检查以使其可见实际正在比较的内容。 【参考方案1】:这转换为具有十六进制代码c2 a0
的字节,根据this answer,这是一个UTF-8 编码的不间断空格。请注意,这 不是 真正的空格,\s 不会匹配它。
【讨论】:
1) 是否有一个易于引用的源/字符集将显示为空白但不匹配(或正则表达式以包含这些) 2) 此字符是否有转义序列或任何简单的可以配得上吗? 我使用了amp-what.com/unicode/search/space(尽管它包含很多其他结果)。转义序列应该是(不出所料)\uc2a0
。
我是否可能遇到任何其他虚假空白,或者这是异常值
再次查看 amp-what 页面,它列出了一些。值得注意的违规者是 \u200B、零宽度空白以及 \u2002 到 \u200a(各种空白宽度)和 \u200F(这是一个狭窄的不间断空格)。
非常感谢,这非常有帮助。【参考方案2】:
这对我有用:
String valor = org.apache.commons.lang3.StringUtils.normalizeSpace(java.text.Normalizer.normalize(valor, java.text.Normalizer.Form.NFD));
【讨论】:
以上是关于Apache POI 异常空白(已解决:\u00A0 不间断空格)的主要内容,如果未能解决你的问题,请参考以下文章
避免Word在Apache POI生成的.doc开头显示空白页