我正在尝试使用 DocumentBuilderFactory 解析 XML 文件,如下所示:
DocumentBuilderFactory ndsParserFactory = DocumentBuilderFactory.newInstance( );
ndsParserFactory.setNamespaceAware( true );
DocumentBuilder ndsParser = ndsParserFactory.newDocumentBuilder( );
Document ndsDocument = ndsParser.parse( ndsFileInputStream );
其中 ndsFileInputStream 是包装包含 XML 的文件的 InputStream。
当文件包含 Unicode 字符(例如 Δ)时出现异常。当我删除包含违规字符的行时,解析工作得很好。
该文件包含特征<?xml version="1.0" encoding="utf-8"?>
标头。
我想知道我是否忽略了正确配置 DocumentBuilderFactory(或 DocumentBuilder)实例以处理 Δ 字符。
编辑(来自评论):
全面披露:这是 Android,我将 XML 文件(带有 NDS 文件扩展名)作为资产包含在我的 Android 应用程序中。我通过 AssetManager 访问它们,它有一个方便的方法可以将资产文件打开到 InputStream 中,然后我将其传递给 DocumentBuilder 的 parse 方法。– d 焊接 16 小时前
我注意到 assets 文件夹默认使用 CP1252 的编码作为其内容。所以我把它改成了UTF8。没运气。然后我从其中一个 NDS 文件(每个链接)中删除了 BOM 并再次尝试。没运气。我在想 APK 文件(像 ZIP 文件一样被压缩)以某种方式破坏了非 ASCII XML。我想我将不得不求助于通过其他方式将 NDS 文件放到 Android 设备上......