2

データにMicrosoft独自のUTF-8プリアンブル(たとえば、これ)が含まれているデータソースからのXMLドキュメントのロードに関するSOに関するいくつかの投稿を見てきました。
ただし、BOM文字を手動で削除する必要のないエレガントな(そして機能する!)ソリューションを見つけることができません。

たとえば、次のがあります。

byte[] b = System.IO.File.ReadAllBytes("c:\\temp_file_containing_bom.txt");
using (System.IO.MemoryStream oByteStream = new System.IO.MemoryStream(b)) {
    using (System.Xml.XmlTextReader oRD = new System.Xml.XmlTextReader(oByteStream)) {
        System.Xml.XmlDocument oDoc = new System.Xml.XmlDocument();
        oDoc.Load(oRD);
        Console.WriteLine(oDoc.OuterXml);
        Console.ReadLine();
    }
}

...しかし、それでも「無効なデータ」例外をスローし続けます。

私の問題は、BOMを含む場合と含まない場合がある、巨大なバイト配列を持っていることです。XMLDocumentにロードする必要があります。そして、私は「ヘルパー」バイトの世話をしなければならない人だとは思いません。

4

1 に答える 1

1

そのBOMはもはや「専有」ではありません。XML仕様で記述されています。古いバージョンのJava(1.4)のみに問題があります。あなたがMS技術を爆発させているなら、それはかなりユーモラスです。

バッファリングされた入力ストリームを使用して、最初の文字がBOMシーケンスの最初の文字でない場合は、最初の文字をプッシュバックしてBOMを除外します。

于 2010-02-03T14:10:37.267 に答える