错误解析XML文件以DOM时(Error when parsing an XML file to D

2019-10-16 17:23发布

我想如下解析使用的DocumentBuilderFactory的XML文件:

DocumentBuilderFactory ndsParserFactory = DocumentBuilderFactory.newInstance( );
ndsParserFactory.setNamespaceAware( true );
DocumentBuilder ndsParser = ndsParserFactory.newDocumentBuilder( );
Document ndsDocument = ndsParser.parse( ndsFileInputStream );

其中ndsFileInputStream是一个InputStream包裹包含XML文件。

我得到一个异常时,该文件包含Unicode字符,例如Δ。 当我带出含有违规的字符线,解析工作得很好。

该文件包含特性<?xml version="1.0" encoding="utf-8"?>头。

我想知道如果我忽略了以处理Δ字符正确配置的DocumentBuilderFactory(或的DocumentBuilder)实例。

(从评论) 编辑

全面披露:这是Android的,而我,包括XML文件(使用NDS文件扩展名)在我的Android应用程序的资产。 我通过AssetManager,这对打开资产文件转换成一个InputStream,然后我传递给我的DocumentBuilder的解析方法的方便,花花公子方法访问它们。 - d焊缝17小时以前

我注意到,资产文件夹在默认情况下其内容使用CP1252的编码。 所以我改变了对UTF8。 没运气。 然后,我从(每条链路)的NDS文件中的一个取出的BOM和再次尝试。 没运气。 我在想,apk文件(被压缩就像一个ZIP文件)以某种方式重整非ASCII XML。 我想我将不得不诉诸其他手段获取NDS文件到Android设备...

Answer 1:

你确定该文件确实是写为UTF-8? 很明显,你可以在一些编辑器中打开它,它正确显示文本,但它可能只是制定好猜测的编码。

另一件事要记住的是所有的人物都是Unicode的UTF-8 -当它击中的字节序列,是不是在声明编码有效解析器只是呛。 UTF-8是一个非常宽容的编码作为7位ASCII字符集的任何字符进行编码,就好像它是纯ASCII,和大量的XML是由什么,但普通的ASCII字符使用。 这就抓住了人的东西时,非ASCII通过显而易见的一个系统自带的文本编码路径,突然缺陷。

你可以尝试编辑XML声明,看看它是否解析下另一个字符编码确定; 8859-7包含Δ符号-它可以在编码?

此外,什么是例外?



文章来源: Error when parsing an XML file to DOM