我的结果集包含特殊字符和变音符号。我尝试了不同的解决方案,第一个打印出文本而没有编码问题的解决方案是:
List<QuerySolution> list = ResultSetFormatter.toList(myResultSet);
for (QuerySolution querySolution : list) {
System.out.println(querySolution); }
与此相反,我更喜欢直接输出,例如:
ResultSetFormatter.out(System.out, myResultSet, myQuery);
但是当我使用这个时,我的编码问题又出现了。 我在 java 中使用 jena 库。
最佳答案
问题是您的终端使用非 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() 相同的编码。
关于java - 结果集编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13044912/