我正在尝试使用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-coretika-parsers,则Maven可以为您提供依赖关系,但是您仍然需要确保您的部署方法能够继承这些依赖关系。

如果错过了Tika Parsers jar和/或它的依赖项,那么您仍然会拥有Tika,但没有解析器,因此解析不会返回内容。您可以通过Tika Config对象获取可用的解析器,并检查是否具有所需的所有解析器。

关于java - 无法在CentOS上使用Tika解析Outlook正文,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24560242/

10-11 04:50