1

私の結果セットには、特殊文字とウムラウトが含まれています。私はさまざまな解決策を試しましたが、エンコードの問題なしにテキストを印刷する最初の解決策は次のとおりです。

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

これの代わりに、私は次のような直接出力を好みます。

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

しかし、これを使用すると、エンコードの問題が再び発生します。私はJavaでjenaライブラリを使用しています。

4

1 に答える 1

1

問題は、端末が非 UTF-8 エンコーディングを使用していることです。

さまざまなResultSetFormatter.outメソッドはOutputStreamではなく を使用Writerします。つまり、文字ではなくバイトを出力します。結果として、エンコーディングを選択する必要があり、UTF-8 が当然の選択です。

あなたは、何との取引なのか不思議に思うかもしれませんSystem.out。少し古風でハイブリッドOutputStreamですが、プラットフォームのデフォルトのエンコーディングを使用してエンコードする文字列を受け入れるいくつかのメソッドがあります。

したがって、最初の方法は動作System.out.println(querySolution)します -- 端末に一致するデフォルトのプラットフォーム エンコーディングを使用します -- 一方、2 番目の方法は 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()

于 2012-10-24T09:48:30.040 に答える