Как изменить кодировку текста на utf-8 при использовании синтаксического анализа текста apache tika (особенно для файлов .txt)

#java #utf-8 #character-encoding #apache-tika

#java #utf-8 #кодировка символов #apache-tika

Вопрос:

Я использую apache tika для извлечения текста. Он отлично работал почти со всеми типами файлов, если только я не пытался протестировать его на китайской машине с документом .txt, написанным на китайском языке. Я не сохранил файл в формате кодировки utf-8. Tika начал разбор неправильных символов строки. Похоже, это проблема с кодировкой, я попытался установить тип кодировки, подобный этому metadata.add(Metadata.CONTENT_ENCODING, "UTF_8") , но безуспешно. Я видел некоторые методы в java, которые преобразуют текст из одного типа кодировки в другой, но только если известен тип исходной кодировки. В моем случае я не уверен в типе кодировки клиента и не могу заставить его использовать utf-8. пожалуйста, помогите мне с этим!! Заранее спасибо 🙂

Ответ №1:

У меня была такая же проблема, но при преобразовании 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();
        }
}