从PDF中提取的“空”字符

时间:2013-03-26 23:38:31

标签: java character pdfbox

我最近尝试使用PDFBox从PDF文件中提取文本。它适用于大多数PDF,但对于一个PDF(不幸的是我不允许共享),句子中的所有句点都没有被提取出来。相反,我得到如下的短语:

...what it would be It’ll be important later on...

看起来它不仅仅是一个时空空间,它只是一个空间,但它不是(至少在Mac OS X上)。如果将文本复制到文本编辑器中并开始在短语中移动文本光标,则在“英尺”中的“t”后面会出现一个“空字符”。重现:

  • 将光标放在“英尺”中字母“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之类的字符,但尝试使用正则表达式替换它不起作用。

1 个答案:

答案 0 :(得分:2)

在意识到该字符不是\uFEFF\u0000,其他Stack Overflow用户遇到的两个unicode值之后,我决定运行一个测试来弄清楚代码究竟是什么。使用this answer中的代码来确定unicode值是什么,我发现神秘字符是\u0008,即“backspace”。为什么会从PDF中提取,我不知道,但是text = text.replace('\u0008', '.')现在用缺失的句号替换它。