Stax 解析器无法读取编码为 UTF-16 的文件

Posted

技术标签:

【中文标题】Stax 解析器无法读取编码为 UTF-16 的文件【英文标题】:Stax parser fails to read files with encoding UTF-16 【发布时间】:2013-04-28 18:10:19 【问题描述】:

我正在使用 stax 解析器在我的应用程序的一个公共 api 中读取一个 xml 文件。该api将输入流作为参数,我正在做类似下面的事情

public Object <commonApi>(InputStream is)
  XMLInputFactory inputFactory = XMLInputFactory.newInstance();
  XMLEventReader reader = inputFactory.createXMLEventReader(is);
  try     
      while (parser.hasNext()) 
      XMLEvent event = parser.nextEvent();
      // reaming parsing logic
     
    Catch (Exception e)
      e.printStackTrace();
   

如果 xml 文件中的编码是 UTF-8,则问题是这样的。如果是 UTF-16,那么它不能正确读取..给出以下异常

javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,41] 消息:prolog 中不允许有内容。

我无法更改通用 api 的签名。我需要对输入流进行操作.. 有什么建议吗?

【问题讨论】:

【参考方案1】:

使用createXMLEventReader(InputStream stream, String encoding)UTF-16 作为encoding

【讨论】:

我的代码必须适用于 UTF-8 和 UTF-16 或任何其他有效编码。所以,我需要一种通用的方法

以上是关于Stax 解析器无法读取编码为 UTF-16 的文件的主要内容,如果未能解决你的问题,请参考以下文章

DOM、SAX 和 StAX XML 解析器之间有啥区别? [关闭]

无法读取 UTF-16 文件

使用 XDocument 加载编码为 UTF 16 的 xml

将 UTF-16 图像加载到内存中

使用 StAX 对 XML 文档进行小修改

我啥时候应该选择 SAX 而不是 StAX?