2012-11-01 35 views
1

我使用的iText 5.3.3iText摘錄「?」而不是「網絡連接」

我嘗試提取PDF文件的文本。

我用類似的東西:

File f (....) 

    FileInputStream fis = new FileInputStream(f); 

    r = new PdfReader(fis); 

    String s=PdfTextExtractor.getTextFromPage(r, 1); 
    System.out.print(s); 

我得到這樣的:

「(...)新加坡航空公司造成史上第一個致命交通意外(危機... )」

文本:

「(...)新加坡航空公司的歷史(由第一致命崩潰的危機......)」

或: 「?(...)全國運營商和最終結論表明需要對(......)」

文本: 「(...)全國運營商和最終結論表明需要(...)「

如你所見,我得到」?「 ins的「fi」。

+0

作爲HRN在他的回答中指出,有用於某些字符組合連字字形。如果此字形具有適當的Unicode映射,則它將映射到Unicode選擇的連字符,而不是分隔字符。很有可能您的控制檯字體不知道該字符,因此顯示「?」。另一方面,如果我們沒有適當的映射到一個Unicode字符,文本提取例程不知所措,也可能包含一個「?」字符。爲進行分析,請提供文件。 – mkl

回答

0

問題解決了。

我更改了.txt文件的默認編碼。

在Eclipse: 窗口>>通用>>內容類型>>正文 默認編碼:UTF-8

0

「網絡連接」可以被稱爲拉丁小LIGATURE FI Unicode字符在該字符

更多信息可以在這裏找到。

http://www.eki.ee/letter/chardata.cgi?ucode=FB01

這通常是因爲編碼問題,或者你在哪裏顯示此文不解碼在「網絡連接」,在源呈現的字體的網頁中使用的字體。

嘗試使用UTF8編碼標準化您的pdf閱讀器字符串,並且如果瀏覽器字體不知道如何呈現它,您可能需要檢查unicode字符並解析出不需要的字符,如「fi」。

這樣做的一種方法是編寫一個正則表達式,它可以解析出任何不需要的unicode字符。下面是一個例子

//Used this to get the unicode range below : http://www.utf8-chartable.de/unicode-utf8-table.pl 
       s = s.Replace(/[^\u0000-\u036F\u2000-\u2023\u2153-\u217E\u20A0-\u20B5]/g, ""); 

希望這會有所幫助。

感謝

+0

我嘗試使用: s。替換(「/ [^ \ u0000- \ u036F \ u2000- \ u2023 \ u217E \ u20A0- \ u20B5]/g」,「」); 但沒有幫助。 – user1055201

+0

我不認爲原來的海報想扔掉連字。相反,他肯定希望他們轉換爲單獨的字母。 – mkl