我正在尝试使用Tika解析Outlook消息的html正文。当我在Windows计算机上运行以下方法时,它可以正常工作,并且获得电子邮件正文的纯文本表示形式。
private String parseHtml(InputStream stream) throws Exception {
ContentHandler contenthandler = null;
try {
Metadata metadata = new Metadata();
Parser parser = new AutoDetectParser();
contenthandler = new BodyContentHandler();
parser.parse(stream, contenthandler, metadata, new ParseContext());
System.out.println(contenthandler.toString());
}
catch (Exception e) {
e.printStackTrace();
}
return contenthandler != null ? contenthandler.toString() : null;
}
但是,当我在CentOS VM和物理服务器上运行相同的代码时,我得到了所有的Outlook标记。 Windows中发生了一些事情,使Tika可以检测到centos上不可用的文档类型。元数据显示我进行调试时:
Windows:Content-Encoding = US-ASCII生成器= Microsoft Word 14(过滤介质)Content-Type = text / html;字符集= us-ascii
Linux:Content-Encoding = US-ASCII Content-Type =文本/纯文本; charset = US-ASCII
最佳答案
正在对答案发表评论...
您缺少某些Tika罐子或它们的依赖项
如果您使用命令行Tika App jar,则您需要的所有内容都在其中,并且它可以独立运行。同样,Tika Server jar是完全独立的。
对于OSGi类型,您既需要Tika Core,也需要Tika捆绑软件,但是应该是这样,因为捆绑软件包含Tika解析器及其依赖项/引用。
否则,如果您使用Java中的Tika,则需要Tika Core,Tika Parsers及其所有依赖项。如果您依赖于tika-core
和tika-parsers
,则Maven可以为您提供依赖关系,但是您仍然需要确保您的部署方法能够继承这些依赖关系。
如果错过了Tika Parsers jar和/或它的依赖项,那么您仍然会拥有Tika,但没有解析器,因此解析不会返回内容。您可以通过Tika Config对象获取可用的解析器,并检查是否具有所需的所有解析器。
关于java - 无法在CentOS上使用Tika解析Outlook正文,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24560242/