File io 使用Jena的I/O中的编码问题

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

我正在使用生成一些RDF文件。整个应用程序使用utf-8文本。源代码也存储在utf-8中

当我在控制台上打印包含非英语字符的字符串时,我得到了正确的格式,例如,
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个地方的字节序列:

  • 数据源。使用,确认源数据中的字符由预期的utf-8十六进制序列0xc3a8表示
  • 在记忆中。在调用printStringFromModel之后,放置一个断点并检查字符串(或)中的字节
  • 输出文件。再次使用十六进制编辑器检查字节序列是否为0xc3a8

  • 这将准确地告诉字节在程序路径上移动时发生了什么,以及它们偏离预期的0xc3a8的位置。

    解决这一问题的最佳方法是打包演示问题的最小代码单元,并在.

    文件可能是以utf-8编写的,但vim和firefox将其作为其他编码读取。以下是如何指定您的.Hmm,unicode二进制\u21a\u00A9分别表示和。的unicode二进制是\u00E9,因此文件似乎编写不正确…供参考最新的Jena文档ion现在在jena.apache.org上-您提到的具体文档在我用log4j打印的地方。源字符串都存储在utf-8中,我可以在任何编辑器上正确地可视化它们。当我将编码从utf-8更改为Firefox/vim中的其他编码时,没有任何变化。