1

I'm new to sparql. I'm trying to retrieve Urdu results from the sparql query and code is working fine in Java forms but when I try to print the result in jsp it shows "ا�? ر_ب�" like this.

 String novelname=request.getParameter("Id");
             novelname = novelname.replaceAll("\\s","");
              OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_MICRO_RULE_INF);
FileManager.get().readModel( model, "C:/Users/Bisma/Documents/NetBeansProjects/Novelmania/web/novelname.owl" );
       String queryStrings ="prefix uni: <http://www.semanticweb.org/novelname.owl#>" +
"select * {uni:"+novelname+" uni:translate ?Novelname. }"; 
Query query = QueryFactory.create(queryStrings);
QueryExecution qe= QueryExecutionFactory.create(query, model);
org.apache.jena.query.ResultSet resultset = qe.execSelect();
java.io.ByteArrayOutputStream baos= new java.io.ByteArrayOutputStream();
            ResultSetFormatter.outputAsCSV(baos, resultset);
            String answer= new String(baos.toString().getBytes("ISO8859_1"), "UTF-8");

            answer= java.util.Arrays.toString(answer.split("http://www.semanticweb.org/novelname.owl#"));
String[]  arrays = answer.split(",");
String nam=arrays[1];
nam=nam.substring(0, nam.length()-1);
nam=nam.replaceAll("\\s","");
out.print(nam);

? �?" something like this

4

1 回答 1

1

您的代码示例有点混乱,因此很难确切看出出了什么问题,但我认为部分问题在于您错误地解码了乌尔都语字符:

String answer = new String(baos.toString().getBytes("ISO8859_1"), "UTF-8");

因此,您有一个ByteArrayOutputStream您调用toString的 ,它使用默认平台编码将字节数组解码为字符串 - 只有当字节数组也是使用默认平台编码生成时才能正常工作。如果不是这种情况,您应该明确要使用哪种编码:) toString(charsetname

然后在您刚刚生成的字符串上调用getBytes("ISO8859_1")- 因此您正在使用 ISO-8859-1 编码将刚刚创建的字符串转换字节。除了使用"ISO8859_1"不正确的字符集名称(应该是"ISO-8859-1",或者更好的是,使用StandardCharsets.ISO_8859_1常量)这一事实之外,这是错误的。ISO-8859-1 是基本拉丁字母的编码,因此几乎可以肯定它不适合乌尔都语。

然后,最后,您再次将第二个字节数组转换回 a String,但这次您使用UTF-8charset 编码。这当然是不正确的,因为您刚刚使用不同的编码生成了该字节数组,所以您知道它不是 UTF-8!

简而言之,这是一团糟。我认为您真正需要做的就是:

String answer = baos.toString(charsetName);

...然后弄清楚charsetName应该是什么,即使用哪种字符集编码来创建字节数组。

于 2016-12-06T01:56:09.433 回答