次のように 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 を介してアクセスします。AssetManager には、アセット ファイルを InputStream で開くための便利なメソッドがあり、DocumentBuilder の parse メソッドに渡します。– d 溶接 16 時間前
アセット フォルダーのコンテンツには、デフォルトで CP1252 のエンコーディングが使用されていることに気付きました。ということでUTF8に変更。運がない。次に、NDS ファイルの 1 つ (リンクごと) から BOM を削除し、再試行しました。運がない。APK ファイル (ZIP ファイルのように圧縮されている) が何らかの形で非 ASCII XML をマングリングしていると考えています。他の方法でNDSファイルをAndroidデバイスに取得する必要があると思います...