我正在使用Jena生成一些RDF文件。整个应用程序使用utf-8文本。源代码也存储在utf-8中。
当我在控制台上打印包含非英文字符的字符串时,我会得到正确的格式,例如Est un lieu généralement officielle assis...
。
然后,我使用RDF编写器输出文件:
Model m = loadMyModelWithMultipleLanguages()
log.info( getSomeStringFromModel(m) ) // log4j, correct output
RDFWriter w = m.getWriter( "RDF/XML" ) // default enc: utf-8
w.setProperty("showXmlDeclaration","true") // optional
OutputStream out = new FileOutputStream(pathToFile)
w.write( m, out, "http://someurl.org/base/" )
// file contains garbled text
RDF文件以:<?xml version="1.0"?>
开头。如果我添加utf-8没有任何变化。
默认情况下,文本应编码为utf-8。
生成的RDF文件验证正常,但是当我使用任何编辑器/可视化工具(vim,Firefox等)打开它时,非英语文本全部搞砸了:Est un lieu g√©n√©ralement officielle assis ...
或Est un lieu g\u221A\u00A9n\u221A\u00A9ralement officielle assis...
。
(无论哪种方式,从用户的角度来看,这显然是不可接受的)。
Jena支持的任何输出格式都会出现同样的问题(RDF,NT等)。
我无法找到合乎逻辑的解释。 official documentation似乎无法解决此问题。
我可以运行任何提示或测试来弄明白吗?
答案 0 :(得分:1)
我的猜测是你的字符串搞砸了,你的printStringFromModel()
方法恰好以一种意外地使它们正确显示的方式输出它们,但是如果没有更多的信息就很难说。
您正在指示Jena在RDF / XML文件中包含XML声明,但没有说明Jena在XML声明中声明了什么编码(如果有的话)。这将有助于了解。
您也没有在printStringFromModel()
方法中显示如何打印字符串。
此外,在Firefox中,转到“视图”菜单,然后转到“字符编码”。选择了什么编码?如果它不是UTF-8,那么选择UTF-8会发生什么?在选择其他编码时,您是否能够正确显示内容?
修改:您在帖子中显示的代码段看起来很好,应该可以使用。我最好的猜测是将源字符串读入Jena模型的代码被破坏,并将UTF-8源读取为ISO-8859-1或类似内容。您应该能够通过检查其中一个违规字符串的length()
来确认或断言:如果é
这样的每个麻烦字符都计为两个,那么错误就在读取;如果它被正确地算作一个,那就是写作。
答案 1 :(得分:1)
我的提示/答案是检查3个地方的字节序列:
这将准确说明字节沿着程序路径行进时发生的情况,以及它们偏离预期的0xc3a8的位置。
答案 2 :(得分:1)
解决此问题的最佳方法是打包代表您可以演示问题的最小代码单元,并在Jena Jira上提交一个完整的,可运行的测试用例作为故障单。