【发布时间】:2012-09-22 15:30:43
【问题描述】:
我正在生成一些带有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 似乎没有解决这个问题。
我可以运行任何提示或测试来弄清楚吗?
【问题讨论】:
-
可能是文件被写为 utf-8,但 vim 和 firefox 正在将它们作为其他编码读取。以下是指定 output encoding in vim 的方法。
-
嗯,unicode二进制\u221A \u00A9分别代表the square root symbol √和the copyright symbol ©。 the e with acute - é 的 unicode 二进制文件是 \u00E9,所以看起来文件写入不正确......
-
作为参考,最新的 Jena 文档现在位于 jena.apache.org - 您参考的具体文档位于 jena.apache.org/documentation/io/…
标签: file-io encoding rdf jena utf