java - 如何在使用 apache tika 文本解析时将文本编码更改为 utf-8(最专门用于 .txt 文件)
问题描述
我正在使用 apache tika 进行文本提取。它在几乎所有文件类型上都可以正常工作,除非我尝试在带有中文 .txt 文档的中文机器上对其进行测试。我没有以 utf-8 编码格式保存文件。Tika 开始解析错误的字符串字符。这似乎是一个编码问题,我尝试像这样设置编码类型
metadata.add(Metadata.CONTENT_ENCODING, "UTF_8")
仍然没有运气。我在 java 中看到了一些将文本从一种编码类型转换为另一种的方法,但前提是源编码类型已知。就我而言,我不确定客户端的编码类型,也不能强迫他使用 utf-8。请帮我解决这个问题!提前致谢:)
解决方案
我遇到了同样的问题,但是在将 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();
}
}
推荐阅读
- python-3.x - 在 Juypter Notebook 中导入 python 文件时出现缩进错误
- firebase - 如何在返回流的函数中获取当前用户
- postgresql - 如何使用 Peewee 模型定义几何字段
- angular - 如何让我的日期选择器以模态显示
- javascript - 如何在调用 chart.update() 时阻止图表 js 自动重新缩放 y 轴?
- python - 如何在纯python中实现简单的客户端-服务器交互?
- python - base64.b64decode() 输出差异:Python 2 与 Python 3
- azure - 如何从 utcnow() 中删除毫秒数导致 Azure 数据工厂
- python - “yield from”在递归函数中是如何工作的?
- typo3 - TYPO3:如何获取 ObjectStorage 类型的域属性字段
从 extbase 中的流体形式映射?