2013-06-28 77 views
3

這個問題是不言自明的。如何在使用Apache TIKA解析文本時指定編碼?

我面臨的問題是,我在網上找到的任何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); 
+0

當你將字符串從StringWriter轉換成被寫出的東西時,你可以設置編碼嗎? – Gagravarr

+0

我該怎麼做呢?問題是,在這之後,我必須對字符串做一堆東西,所以我基本上在做sw.toString()並使用該結果來操縱它。但是失去了編碼... – superdemongob

+1

Java中的字符串始終是Unicode。在讀取字節/文件/流時,只需要擔心編碼,並將其轉換爲字符串,並再次寫入字符串。所以,像'新的FileOutputStream中(「的test.txt」)寫(「測試」 .getBytes(「ISO-8859-1」));'應該是罰款一組編碼輸出您的字符串 – Gagravarr

回答

-2

如果解析文本,則可以使用傳統IO來指定編碼。

+4

能否請您展開在這個答案,使其更有用。 – laalto

1

您可以通過元數據對象設置編碼。 我用這個片段:

import org.apache.tika.metadata.Metadata; 

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

默認情況下蒂卡試圖確定編碼本身,解析HTML時。 但有時這可能會導致錯誤。

+0

詳見org.apache.tika.parser.html.HtmlParser.getEncoding() –

+0

unfornatly蒂卡將其視爲提案,讓我遇到了在那裏Tika使用另一個(假)編碼的文件,但在大多數情況下,這幫助。 –