Java Jena的结果为UTF-8格式

Java Jena的结果为UTF-8格式,java,utf-8,sparql,jena,Java,Utf 8,Sparql,Jena,如何获得UTF-8格式的Jena(Java语言)结果? 我的代码: Query Query=QueryFactory.create(queryString); QueryExecution qexec=QueryExecutionFactory.sparqlService(“http://lod.openlinksw.com/sparql“,查询字符串); ResultSet results=qexec.execSelect(); List List=ResultSetFormatter.toL

如何获得UTF-8格式的Jena(Java语言)结果? 我的代码:

Query Query=QueryFactory.create(queryString);
QueryExecution qexec=QueryExecutionFactory.sparqlService(“http://lod.openlinksw.com/sparql“,查询字符串);
ResultSet results=qexec.execSelect();
List List=ResultSetFormatter.toList(结果);
System.out.println(list.get(i.get)(“丘吉尔”);

我想这与什么有关

看了之后,事情发生了:

  • 进口商采用utf-8编码的输入“Chodovskátvrz”
  • 在utf-8中,这是:“43686F646F76736Bc3a1207476727A”(c3a1在utf-8中是“a”)
  • 导入程序将这些字节改为unicode字符读取
  • 因此,您得到的不是“á”,而是两个字符c3a1,即“Ô和“Ô
您可以通过将字符串的字符转换为字节数组,然后从中生成一个新字符串来逆转这种情况。我相信一定有更简单的方法,但这里有一个例子:

public class Convert
{
    public static void main(String... args) throws Exception {
        String in = "Chodovsk\u00C3\u00A1 tvrz";
        char[] chars = in.toCharArray();
        // make a new string by treating chars as bytes
        String out = new String(fix(chars), "utf-8");
        System.err.println("Got: " + out); // Chodovská tvrz
    }

    public static byte[] fix(char[] a) {
        byte[] b = new byte[a.length];
        for (int i = 0; i < a.length; i++) b[i] = (byte) a[i];
        return b;
    }
}

这要简单得多。

我想你的意思是“导入程序读取这些字节而不是iso-8859-*字符。”iso-8859-*是否对应较低的unicode代码点?啊,是的!这简化了事情。
public class Convert
{
    public static void main(String... args) throws Exception {
        String in = "Chodovsk\u00C3\u00A1 tvrz";
        char[] chars = in.toCharArray();
        // make a new string by treating chars as bytes
        String out = new String(fix(chars), "utf-8");
        System.err.println("Got: " + out); // Chodovská tvrz
    }

    public static byte[] fix(char[] a) {
        byte[] b = new byte[a.length];
        for (int i = 0; i < a.length; i++) b[i] = (byte) a[i];
        return b;
    }
}
String churchname = list.get(i).get("churchname").toString();
String out2 = new String(churchname.getBytes("iso-8859-1"), "utf-8");