我使用iText 5.3.3
我尝试从pdf文件中提取文本。
我使用类似的东西:
File f (....)
FileInputStream fis = new FileInputStream(f);
r = new PdfReader(fis);
String s=PdfTextExtractor.getTextFromPage(r, 1);
System.out.print(s);
我明白了:
“(...)新加坡航空公司因历史上第一次致命事故造成的危机(......)”
表示文字:
“(......)新加坡航空公司因历史上首次致命事故造成的危机(......)”
或: “(......)国家承运人和最终结论表明需要(......)”
文字: “(......)国家承运人和最终结论表明需要(......)”
如你所见,我得到“?”注意“fi”。
答案 0 :(得分:0)
“fi”可以是称为LATIN SMALL LIGATURE FI的unicode角色
有关该角色的更多信息,请点击此处。
http://www.eki.ee/letter/chardata.cgi?ucode=FB01
这通常是因为编码问题或者在显示此文本的网页上使用的字体不能解码在源中呈现“fi”的字体。
尝试使用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, "");
希望这有帮助。
由于
答案 1 :(得分:0)
问题解决了。
我更改了.txt文件的默认编码。
在Eclipse中: 窗口>>常规>>内容类型>>文字 默认编码:UTF-8