0

encoding="UTF-16" と記述されているエンコーディングを持つ Stax パーサーで XML ファイルを解析していますが、この XML ファイルの実際のコンテンツは UTF-16 ではありません。ファイルに記載されているエンコーディングを無視し、コンテンツに基づいて自動検出を行うように Stax パーサーに指示するにはどうすればよいですか

4

2 に答える 2

1

使用する 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を強く信じています。

于 2013-06-04T06:49:44.330 に答える