2010-04-20 79 views
2

如何才能以UTF-8格式輸入Jena(Java語言)結果? 我的代碼:Jena以UTF-8格式輸出結果

Query query= QueryFactory.create(queryString); 
QueryExecution qexec= QueryExecutionFactory.sparqlService("http://lod.openlinksw.com/sparql", queryString); 
ResultSet results = qexec.execSelect(); 
List<QuerySolution> list = ResultSetFormatter.toList(results); 
System.out.println(list.get(i).get("churchname")); 

回答

5

我認爲這是關係到UTF-8 formatting in SPARQL

說完看着它這裏發生了什麼:

  • 進口商輸入了 'Chodovskátvrz' 在UTF-8編碼。
  • In utf-8即:'43 68 6f 64 6f 76 73 6b c3 a1 20 74 76 72 7a'(c3 a1是utf-8中的''')
  • 導入器將這些字節讀取爲unicode字符。
  • 因此,不是'á',而是兩個字符c3 a1,它們是'Ã'和'¡'。

您可以通過將字符串的字符轉換爲字節數組,然後從中創建一個新字符串來反轉。我敢肯定,必須有一個更簡單的方法,但這裏有一個例子:

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; 
    } 
} 

list.get(i).get("churchname").toString()使用這個(這是您要打印的)會解決這些名字。

編輯:

或者只是使用:

String churchname = list.get(i).get("churchname").toString(); 
String out2 = new String(churchname.getBytes("iso-8859-1"), "utf-8"); 

這要簡單得多。

+0

我想你的意思是「進口商將這些字節替換爲iso-8859- *字符。」 – 2010-04-20 14:49:04

+0

iso-8859- *是否對應於較低的unicode碼點?啊,它的確如此!這簡化了事情。 – user205512 2010-04-20 15:10:53