我的结果集包含特殊字符和变音符号。我尝试了不同的解决方案,第一个打印出文本而没有编码问题的解决方案就是这个:
List<QuerySolution> list = ResultSetFormatter.toList(myResultSet);
for (QuerySolution querySolution : list) {
System.out.println(querySolution); }
而不是这个,我更喜欢直接输出,如:
ResultSetFormatter.out(System.out, myResultSet, myQuery);
但是当我使用它时,再次出现了我的编码问题。 我在java中使用jena库。
答案 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()
相同的编码。