【问题标题】:How to change text encoding to utf-8 while using apache tika text parsing (most specifically for .txt files)如何在使用 apache tika 文本解析时将文本编码更改为 utf-8(最特别适用于 .txt 文件)
【发布时间】:2020-12-12 20:32:54
【问题描述】:
我正在使用 apache tika 进行文本提取。它在几乎所有文件类型上都可以正常工作,除非我尝试在带有中文 .txt 文档的中文机器上对其进行测试。我没有以 utf-8 编码格式保存文件。 Tika 开始解析错误的字符串字符。这似乎是一个编码问题,我尝试像这样设置编码类型
metadata.add(Metadata.CONTENT_ENCODING, "UTF_8")
仍然没有运气。我在 java 中看到了一些将文本从一种编码类型转换为另一种的方法,但前提是源编码类型已知。就我而言,我不确定客户端的编码类型,也不能强迫他使用 utf-8。请帮我解决这个问题!
在此先感谢:)
【问题讨论】:
标签:
java
utf-8
character-encoding
apache-tika
【解决方案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();
}
}