encoding="UTF-16" と記述されているエンコーディングを持つ Stax パーサーで XML ファイルを解析していますが、この XML ファイルの実際のコンテンツは UTF-16 ではありません。ファイルに記載されているエンコーディングを無視し、コンテンツに基づいて自動検出を行うように Stax パーサーに指示するにはどうすればよいですか
2 に答える
使用する StAX-Parsing の方法 ( と ) に応じてXMLStreamReader
、 .XMLEventReader
の create-Method にエンコーディングを渡すことができますXMLInputFactory
。
- createXMLStreamReader(InputStream ストリーム、文字列エンコーディング)
- createXMLEventReader(InputStream ストリーム、文字列エンコーディング)
何も指定されていない場合、一部の StAX 実装は実際のエンコーディングを「推測」しようとしますが (たとえば、Weblogic の StAX-Implementation はそれを試みます)、JVM の Default-Encoding を使用するものもあります (System-Property file.encoding
; 注意: 設定する必要があります)。起動時にすでに、実行時に変化なし)。
自分でエンコーディングを理解したい/理解しなければならない場合は、これを自分で実装する必要があります。私はこれを一度行う必要があり、当時の要件、仕様、および環境に基づいて、システムでサポートされているすべてのエンコーディングを試す必要があり、あまり良くない試行錯誤のアプローチになりました。 . 「十分に良い試合」ができるまで、次々と。また、 BOM (Byte Order Marks)にも細心の注意を払う必要がありました。
一般に、XML-Prologue は正しいエンコーディングを保持する必要があると思います。なぜなら、コードで行われることはすべて最善の推測にすぎないからです (しかし、この推測も正しい可能性があります)。
個人的なメモとして、それはひどく間違っているかもしれませんが、私にとってはうまくいきます: XML は主に入力データであるため、私はGIGOを強く信じています。