2012-10-24 78 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