乌尔都语 ontology 在 jsp 中的结果

Result of urdu ontology in jsp

我是 sparql 的新手。我正在尝试从 sparql 查询中检索乌尔都语结果,并且代码在 Java 表单中工作正常,但是当我尝试在 jsp 中打印结果时,它会像这样显示“ا�? ر_ب�”。

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

? �?" 像这样

您的代码示例有点乱,因此很难确切地看出哪里出了问题,但我认为部分问题在于您对乌尔都语的解码不正确字符数:

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 是基本拉丁字母的编码,因此几乎可以肯定它不适合乌尔都语。

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

总之,乱七八糟。我认为您真正需要做的是:

String answer = baos.toString(charsetName);

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