2013-03-26 198 views
2

我最近試圖使用PDFBox從PDF文件中提取文本。它適用於大多數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,但試圖用正則表達式替換它,如建議不起作用。

+0

,你不能共享文件(並感到不得不說的話),這一事實使得摘錄「將他的腳無論哪種方式,」有點令人毛骨悚然:-P – 2013-03-26 23:41:50

+0

哈哈,是啊!也許這不是分享的最好例子,因爲它與上下文無關。我改變了這個例子。 – Thunderforge 2013-03-26 23:46:06

回答

2

在意識到該字符不是\uFEFF\u0000,其他堆棧溢出用戶遇到的兩個unicode值之後,我決定運行一個測試來確定代碼實際是什麼。在this answer使用代碼,以確定哪些Unicode值是,我想通了,神祕的角色是\u0008,這是「backspace」。爲什麼會從PDF中拉出來,我不知道,但text = text.replace('\u0008', '.')現在將其替換爲缺失的時段。