乌尔都语 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
应该是什么,即使用哪种字符集编码来创建字节数组。
我是 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
应该是什么,即使用哪种字符集编码来创建字节数组。