首页 > 解决方案 > 如何在使用 apache tika 文本解析时将文本编码更改为 utf-8(最专门用于 .txt 文件)

问题描述

我正在使用 apache tika 进行文本提取。它在几乎所有文件类型上都可以正常工作,除非我尝试在带有中文 .txt 文档的中文机器上对其进行测试。我没有以 utf-8 编码格式保存文件。Tika 开始解析错误的字符串字符。这似乎是一个编码问题,我尝试像这样设置编码类型 metadata.add(Metadata.CONTENT_ENCODING, "UTF_8") 仍然没有运气。我在 java 中看到了一些将文本从一种编码类型转换为另一种的方法,但前提是源编码类型已知。就我而言,我不确定客户端的编码类型,也不能强迫他使用 utf-8。请帮我解决这个问题!提前致谢:)

标签: javautf-8character-encodingapache-tika

解决方案


我遇到了同样的问题,但是在将 Powerpoint 转换为文本时,我发现通过使用OutputStream可以指定编码的正确编码,编码运行良好。您尝试添加的元数据不会对转换产生任何影响,只是在 html 文件的标题中添加该行。

这是我的代码:

public String tranformPowerpointToText(File file) throws IOException, TikaException {
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        ToTextContentHandler toTextContentHandler= new ToTextContentHandler(byteArrayOutputStream, "UTF-8");

        AutoDetectParser parser = new AutoDetectParser();

        Metadata metadata = new Metadata();
        try (InputStream stream = new FileInputStream(file)) {
            parser.parse(stream, toTextContentHandler, metadata);
            return byteArrayOutputStream.toString();
        } catch (SAXException e) {
            e.printStackTrace();
        }
}

推荐阅读