1

我的结果集包含特殊字符和变音符号。我尝试了不同的解决方案,第一个打印出没有编码问题的文本是这个:

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

而不是这个,我更喜欢直接输出,如:

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

但是当我使用它时,我的编码问题又出现了。我在java中使用jena库。

4

1 回答 1

1

问题是您的终端使用的是非 UTF-8 编码。

各种ResultSetFormatter.out方法采用 aOutputStream而不是 a 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().

于 2012-10-24T09:48:30.040 回答