Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在使用ApacheTika解析文本时,如何指定编码?_Java_Parsing_Apache Tika - Fatal编程技术网

Java 在使用ApacheTika解析文本时,如何指定编码?

Java 在使用ApacheTika解析文本时,如何指定编码?,java,parsing,apache-tika,Java,Parsing,Apache Tika,这个问题不言自明 我面临的问题是,我在网上找到的任何Tika示例代码都使用StringWriter,如下所示。如果我能以某种方式使用OutputStreamWriter,我可以毫无问题地指定编码。。。任何帮助都将不胜感激 InputStream inStream = new FileInputStream(pathname); StringWriter sw = new StringWriter(); SAXTransformerFactory factory = (SAXTransformer

这个问题不言自明

我面临的问题是,我在网上找到的任何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);

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

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

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时会尝试确定编码本身。
但有时这可能会导致错误。

当您将StringWriter中的字符串转换为被写入的内容时,是否可以设置编码?我该怎么做?问题是,在这一点之后,我必须对字符串做一些处理,因此我基本上是在做sw.toString()并使用该结果来操作它。但这会丢失编码…Java中的字符串总是Unicode。您只需要在读取字节/文件/流并将其转换为字符串时担心编码问题,以及在再次写入字符串时担心编码问题。因此,类似于
newfileoutputstream(“test.txt”).write(“test.getBytes”(“iso-8859-1”)
可以在一个集合编码中输出字符串,请您对这个答案进行扩展以使其更有用。详细信息请参见org.apache.tika.parser.html.HtmlParser.getEncoding(),不幸的是,tika将此作为一个建议,所以我遇到了tika使用另一种(错误)编码的文件,但在大多数情况下这是有帮助的。