我最近尝试使用PDFBox从PDF文件中提取文本。它适用于大多数PDF,但对于一个PDF(不幸的是我不允许共享),句子中的所有句点都没有被提取出来。相反,我得到如下的短语:
...what it would be It’ll be important later on...
看起来它不仅仅是一个时空空间,它只是一个空间,但它不是(至少在Mac OS X上)。如果将文本复制到文本编辑器中并开始在短语中移动文本光标,则在“英尺”中的“t”后面会出现一个“空字符”。重现:
似乎PDFBox提取了某种“空字符”代替句点。我试图用几种不同的方式替换它,但没有运气:
String oldText = text;
text = text.replace('\u0000', '.'); //Unicode null
text = text.replace('\0', '.'); //C null
System.out.println(oldText.equals(text)); //Returns true
//Also tried text.replace(null, '.'), but it doesn't compile
这个“空字符”是什么?如何将其替换为应该存在的文本?
编辑:This answer建议该字符可能是\uFEFF
之类的字符,但尝试使用正则表达式替换它不起作用。
答案 0 :(得分:2)
在意识到该字符不是\uFEFF
或\u0000
,其他Stack Overflow用户遇到的两个unicode值之后,我决定运行一个测试来弄清楚代码究竟是什么。使用this answer中的代码来确定unicode值是什么,我发现神秘字符是\u0008
,即“backspace”。为什么会从PDF中提取,我不知道,但是text = text.replace('\u0008', '.')
现在用缺失的句号替换它。