2012-03-30 48 views
1

我是使用WoodStox的新手。我必须读取所有可能的Unicode字符组合并写入XML文件。 WoodStox无法读取某些Unicode字符。有人可以帮助我如何跳过遇到的字符或一些解决方案来编写XML文件中的Unicode字符。Woodstox解析器不支持某些Unicode字符

例外我得到的是 错误在第1行的列24364002数据 - 组 - results.xml的1404735: SXXP0003:由XML解析器报告错误:参考字符“& #xfffe”是一个无效的XML字符。 异常是:net.sf.saxon.trans.XPathException:org.xml.sax.SAXParseException:字符引用“&#xfffe”是一个无效的XML字符。

回答

1

我对WoodStox也不熟悉,但我可以说FFFE确实不是一个有效的Unicode字符,所以它可能比解析器更有问题。一些编码器以UTF-16编码最常用FFFE来指示字节顺序(小或大端)。取决于它被读回为FFFE还是FEFF,解码器知道选择哪个字节顺序。但它不是一个标准,并不是所有解码器都支持它。

当这样使用时,它总是文件的前两个字节。

所以,你需要检查的是:

  • 您是否使用了正确的字符编码(通常是UTF-8或UTF-16)?
  • 如果使用UTF-16,您的文件是否以FFFE或FFEF开头?
  • WoodStox有一个设置可以自动检测字节顺序吗?

最糟糕的情况是,如果您的文件以FFFE或FFEF开头,那么只需在将文件提供给WoodStox之前将其从文件中删除即可。确保你在WoodStox中设置了正确的字节顺序。

+0

默认情况下,Woodstox会自动处理物料清单,所以只要输入字节流('InputStream'),就应该正确处理它。偷偷摸摸的唯一方法是要么具有双BOM,要么手动构建一个将BOM解码为字符的“Reader” - 一旦具有该值的“char”,它就不会是BOM。 – StaxMan 2012-05-03 02:11:46