5

外部ツールで使用される XML ファイルを保存しています。残念ながら、ツールはファイルの先頭にある
エンコーディング BOM (バイト オーダー マーク: ) を認識しません。EF BB BF

<?xml version="1.0" encoding="UTF-8"?>
...

00000000h: EF BB BF 3C 3F 78 6D 6C 20 76 65 72 73 69 6F 6E   <?xml version
00000010h: 3D 22 31 2E 30 22 20 65 6E 63 6F 64 69 6E 67 3D   ="1.0" encoding=
00000020h: 22 55 54 46 2D 38 22 3F 3E ...                    "UTF-8"?>

私のコード:

XmlDocument doc = new XmlDocument();
// Stuff...
using (TextWriter sw = new StreamWriter(file, false, Encoding.UTF8)) {
    doc.Save(sw);
}

質問:
TextWriter に BOM を書き込まないようにするにはどうすればよいですか?

4

1 に答える 1

6

UTF8Encodingを使用する代わりに、BOM を使用しないインスタンスを作成できますEncoding.UTF8

using (TextWriter sw = new StreamWriter(file, false, new UTF8Encoding(false))) {
    doc.Save(sw);
}

繰り返しインスタンス化するコストが心配な場合は、これを静的フィールドに保存できます。

private static readonly Encoding UTF8NoByteOrderMark = new UTF8Encoding(false);

...

using (TextWriter sw = new StreamWriter(file, false, UTF8NoByteOrderMark)) {
    doc.Save(sw);
}
于 2014-06-12T13:03:35.647 に答える