File io 使用Jena的I/O中的编码问题
我正在使用生成一些RDF文件。整个应用程序使用utf-8文本。源代码也存储在utf-8中 当我在控制台上打印包含非英语字符的字符串时,我得到了正确的格式,例如,File io 使用Jena的I/O中的编码问题,file-io,encoding,rdf,jena,utf,File Io,Encoding,Rdf,Jena,Utf,我正在使用生成一些RDF文件。整个应用程序使用utf-8文本。源代码也存储在utf-8中 当我在控制台上打印包含非英语字符的字符串时,我得到了正确的格式,例如,Est un-liue générelement officielle assis… 然后,我使用RDF编写器输出文件: Model m = loadMyModelWithMultipleLanguages() log.info( getSomeStringFromModel(m) ) // log4j, correct output R
Est un-liue générelement 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文件以:
开头。如果添加utf-8,则不会发生任何变化
默认情况下,文本应编码为utf-8。
生成的RDF文件验证了ok,但当我用任何编辑器/可视化工具(vim、Firefox等)打开它时,非英语文本都乱七八糟:Est-un-g√©n√©官方建筑材料协会…
或替代g\u21A\u00A9n\u21A\u00A9官方建筑材料协会…
。
(无论哪种方式,从用户的角度来看,这显然是不可接受的)。
Jena支持的任何输出格式(RDF、NT等)都会出现同样的问题
我真的找不到一个合乎逻辑的解释。
政府似乎没有解决这个问题
我可以运行任何提示或测试来解决这个问题吗?我的猜测是,您的字符串被弄乱了,而您的
printStringFromModel()
方法恰好以一种意外的方式输出它们,使它们正确显示,但是如果没有更多信息,很难说
您指示Jena在RDF/XML文件中包含一个XML声明,但不要说Jena在XML声明中声明了什么编码(如果有)。这将有助于了解
您也没有显示如何在printStringFromModel()
方法中打印字符串
另外,在Firefox中,进入查看菜单,然后进入字符编码。选择什么编码?如果不是UTF-8,那么当您选择UTF-8时会发生什么?当选择其他编码时,您是否能够正确显示内容
编辑:您在帖子中显示的代码片段看起来不错,应该可以正常工作。我最好的猜测是,将源字符串读入Jena模型的代码被破坏了,并将UTF-8源代码读入ISO-8859-1或类似的代码。您应该能够通过检查其中一个违规字符串的
length()
来确认或取消确认:如果像é
这样的每个麻烦字符都被计为两个,则错误发生在读取时;如果它被正确地算作一,那么它就在写的时候。我的提示/答案是检查3个地方的字节序列:
这将准确地告诉字节在程序路径上移动时发生了什么,以及它们偏离预期的0xc3a8的位置。解决这一问题的最佳方法是打包演示问题的最小代码单元,并在.文件可能是以utf-8编写的,但vim和firefox将其作为其他编码读取。以下是如何指定您的.Hmm,unicode二进制\u21a\u00A9分别表示和。的unicode二进制是\u00E9,因此文件似乎编写不正确…供参考最新的Jena文档ion现在在jena.apache.org上-您提到的具体文档在我用log4j打印的地方。源字符串都存储在utf-8中,我可以在任何编辑器上正确地可视化它们。当我将编码从utf-8更改为Firefox/vim中的其他编码时,没有任何变化。