【问题标题】:Force no BOM when saving XML保存 XML 时强制无 BOM
【发布时间】:2014-06-12 13:01:15
【问题描述】:

我正在保存一个外部工具使用的 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?

【问题讨论】:

    标签: c# xml byte-order-mark textwriter


    【解决方案1】:

    您可以创建一个不使用 BOM 的 UTF8Encoding 实例,而不是使用 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);
    }
    

    【讨论】:

    • 我印象深刻 - 不到两分钟的详细答案。你一定会成为Burning Keyboard金徽章的持有者!
    猜你喜欢
    • 1970-01-01
    • 2011-06-23
    • 2020-12-10
    • 2013-03-19
    • 2011-09-21
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    相关资源
    最近更新 更多