【问题标题】:How can I specify encoding when parsing text with Apache TIKA?使用 Apache TIKA 解析文本时如何指定编码?
【发布时间】:2014-01-06 22:02:39
【问题描述】:

这个问题不言自明。

我面临的问题是我在网上找到的任何 Tika 示例代码都使用了 StringWriter,如下所示。如果我能以某种方式使用 OutputStreamWriter,我可以指定编码没问题...任何帮助将不胜感激。

InputStream inStream = new FileInputStream(pathname);
StringWriter sw = new StringWriter();
SAXTransformerFactory factory = (SAXTransformerFactory)SAXTransformerFactory.newInstance();
TransformerHandler handler = factory.newTransformerHandler();
handler.getTransformer().setOutputProperty(OutputKeys.METHOD,"html");
handler.getTransformer().setOutputProperty(OutputKeys.INDENT,"no");
handler.setResult(new StreamResult(sw));
parser.parse(inStream, handler, metadata, context);

【问题讨论】:

  • 当你把 StringWriter 中的 String 变成可以写出来的东西时,你能设置编码吗?
  • 我该怎么做呢?问题是,在这一点之后,我必须对字符串做很多事情,所以我基本上是在做 sw.toString() 并使用该结果来操作它。但这会丢失编码...
  • Java 中的字符串始终是 Unicode。您只需要在读入字节/文件/流并将其转换为字符串以及再次写回字符串时担心编码。因此,new FileOutputStream("test.txt").write("Test".getBytes("iso-8859-1")); 之类的东西应该可以以集合编码输出您的字符串

标签: java parsing apache-tika


【解决方案1】:

您可以通过元数据对象设置编码。 我用过这个sn-p:

import org.apache.tika.metadata.Metadata;

Metadata metadata = new Metadata();
metadata.add(Metadata.CONTENT_ENCODING, DATAFILE_CHARSET);
String parsedString = tika.parseToString(inputStream, metadata);

默认情况下,tika 在解析 html 时会尝试确定编码本身。 但有时这可能会导致错误。

【讨论】:

  • 详情见org.apache.tika.parser.html.HtmlParser.getEncoding()
  • 不幸的是 tika 将此作为建议,因此我遇到了 tika 使用另一种(错误)编码的文件,但在大多数情况下这有所帮助。
【解决方案2】:

如果解析文本,可以使用传统的IO来指定编码。

【讨论】:

  • 能否请您扩展此答案以使其更有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-12
  • 2015-07-16
  • 1970-01-01
  • 1970-01-01
  • 2015-09-09
  • 2017-09-09
  • 1970-01-01
相关资源
最近更新 更多