结果集编码问题

时间:2012-10-24 07:50:04

标签: java encoding utf-8 resultset jena

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

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

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

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

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

1 个答案:

答案 0 :(得分: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()相同的编码。