2012-10-24 80 views
1

我的結果集包含特殊字符和變音符號。我嘗試了不同的解決方案,並能打印出的文本,而不編碼的問題,第一個是這一個:結果集編碼問題

List<QuerySolution> list = ResultSetFormatter.toList(myResultSet); 
for (QuerySolution querySolution : list) { 
    System.out.println(querySolution); } 

取而代之的是我更喜歡的直接輸出,如:

ResultSetFormatter.out(System.out, myResultSet, myQuery); 

但是,當我用這個,還有我的編碼問題。 我在java中使用jena庫。

+0

您使用的是Windows嗎? Windows命令行和IDE中的編碼問題是否相同? – artbristol

回答

1

的問題是,你的終端使用非UTF-8編碼。

各種ResultSetFormatter.out方法採取OutputStream而不是Writer,即他們將輸出字節而不是字符。因此它需要選擇一種編碼,而UTF-8是一個明顯的選擇。

你可能合理難怪交易是System.out什麼。這有點陳舊,混合OutputStream,但有一些方法接受使用平臺默認編碼進行編碼的字符串。

因此第一種方法的工作原理 - System.out.println(querySolution)使用該終端相匹配的默認平臺編碼 - 而第二個將使用UTF-8。

ResultSetFormatter沒有任何方法,其接受一個Writer(遺漏),所以我建議或者使用:

System.out.println(ResultSetFormatter.asText(myResultSet, myQuery)); 

,這將是適合於小結果集,或:

TextOutput fmt = new TextOutput(myQuery); 
fmt.format(new OutputStreamWriter(System.out, Charset.defaultCharset()), myResultSet); 

這將會流,並且應該使用與System.out.println()相同的編碼。

+0

非常感謝。我玩過System.out和幾個輸出流,但是你不能修改字符集。謝謝你的啓發。 – wassermine

+0

小心使用非UTF-8編碼。可能有不能寫入的字符。由於RDF數據有時會混合使用語言和腳本,因此來自不同地方的字符可能會出現在一個結果集中。 UTF-8可以處理。 – AndyS

+0

好點。我建議試着讓你的終端進入utf-8模式,這可能會讓你的生活更加愉快。 – user205512