BOMなしでXDocumentのコンテンツを出力する方法はありますか?Flashで出力を読み取ると、エラーが発生します。
7 に答える
XmlWriterを使用してXMLを記述している場合は、エンコードを初期化されたものに設定して、BOMを除外できます。
例:System.Text.UTF8Encodingのコンストラクターは、BOMが必要かどうかを指定するためにブール値を取ります。したがって、次のようになります。
XmlWriter writer = XmlWriter.Create("foo.xml");
writer.Settings.Encoding = new System.Text.UTF8Encoding(false);
myXDocument.WriteTo(writer);
UTF-8エンコーディングを使用し、バイト順マークを使用しないXmlWriterを作成します。
Chris Wenham の回答に対するわずかな変更。
XmlWriter の作成後にエンコーディングを変更することはできませんが、XmlWriter の作成時に XmlWriterSettings を使用して設定できます。
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = new System.Text.UTF8Encoding(false);
XmlWriter writer = XmlWriter.Create("foo.xml", settings);
myXDocument.WriteTo(writer);
上記にコメントを追加することはできませんでしたが、Chris Wenhamの提案を使用する人がいる場合は、ライターを破棄することを忘れないでください。なぜ出力が切り捨てられたのか疑問に思ったのですが、それが理由でした。
using(XmlWriter...) {...}
クリスの提案への変更を提案する
投稿の組み合わせの一種、多分このようなもの:
MemoryStream ms = new MemoryStream();
StreamWriter writer = new StreamWriter(ms, new UTF8Encoding(false));
xmlDocument.Save(writer);
前述のとおり、この問題には悪臭があります。
このサポート ノートによると、Flash は BOM を使用して UTF-16BE と UTF-16LE を明確に区別します。XDocument は UTF16 でエンコードされた整形式の XML を生成し、Macromedia は Flash が UTF16 でエンコードされた整形式の XML を読み取ることができると主張しています。
これは、あなたが遭遇している問題が何であれ、おそらく BOM が原因ではないのではないかと疑っています。それが私だったら、実際の問題は別の場所にあることを期待して、もっと掘り下げます。
おそらく、出力でSystem.Text.Encoding.Convert()を使用できます。私がテストしたものではなく、試してみるものと同じです。
文字列に変換してから、自分でマークを削除してください。