java - 结果集编码问题

标签 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 库。

最佳答案

问题是您的终端使用非 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/

相关文章:

c++ - 如何使用 libopus 获得格式正确的 opus 文件?

java - 如何在 Android 设备上将 WAV 编码为 mp3

php - 阿拉伯语单词上的 MySQL SELECT 在 PHP 上返回 0 结果,但在 SQLBuddy/phpMyAdmin 上返回 0 结果

asp.net - ASP.NET 2 中的 ISO-8859-1 到 UTF8

java - Groovy 为每个匹配项返回一个数组

java - Gdx.input.getY 被翻转

java - 如何在 Java 中不公开公共(public)接口(interface)

java - Fetch join 导致 N+1 查询或抛出 org.hibernate.QueryException

c# - Unity3D 中的 Encoding.UTF32.GetBytes 返回额外的零

JavaFx 希腊字符编码