none
怎样保存Xml为不带签名的utf-8的格式? RRS feed

  • 问题

  • 在网上找了半天,只找到了个设置不带utf-8签名的格式的写法:
               
    UTF8Encoding utf8 = new UTF8Encoding(false);//false 表示不带签名(BOM,Byte Order Mark)

    都不知道这行代码怎么用。

    我的程序是手动拼写xml文档,然后使用XmlDocument.load()加载,再用XmlDocument.save()方法保存,但save方法根本没有设置编码的地方。

    XmlDocument.save()方法保存的格式是 带签名的utf-8格式(utf-8 with signature)。

    恳请大家帮助。谢谢。



    moneyriver2006
    2009年9月14日 17:34

答案

全部回复

  •     XmlDocument doc = new XmlDocument();
        doc.LoadXml("<book genre='novel' ISBN='1-861001-57-5'>" +
                    "<title>Pride And Prejudice</title>" +
                    "</book>");
    
        //Create an XML declaration. 
        XmlDeclaration xmldecl;
        xmldecl = doc.CreateXmlDeclaration("1.0","gb2312",null);
    
        //Add the new node to the document.
        XmlElement root = doc.DocumentElement;
        doc.InsertBefore(xmldecl, root);
    
        Console.WriteLine("Display the modified XML...");        
        doc.Save(Console.Out);



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2009年9月14日 19:58
    版主
  • 你好,参考这篇文档http://msdn.microsoft.com/zh-cn/library/system.xml.xmldocument.createxmldeclaration(VS.80).aspx
    public virtual XmlDeclaration CreateXmlDeclaration (
        string version,
        string encoding,
        string standalone
    )

    standalone

    该值必须是“yes”或“no”。如果这是空引用(在 Visual Basic 中为 Nothing) 或 String.Empty,Save 方法不在 XML 声明上写出独立属性。


    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    • 已标记为答案 Johnny Qian 2009年9月20日 15:40
    2009年9月15日 1:40
    版主
  • 使用  XML declaration 还是不行啊

                //Create an XML declaration.
                XmlDeclaration xmldecl;
                xmldecl = doc.CreateXmlDeclaration("1.0", "utf-8", null);

    输出的xml还是 带签名的utf-8格式啊
    moneyriver2006
    2009年9月15日 2:30
  • standalone 不涉及到格式啊  无论是null,yes,no,输出的xml,依旧是带签名的 utf-8格式

    moneyriver2006
    2009年9月15日 2:31
  • 怎么没人回复啊,帮帮忙啊~~
    moneyriver2006
    2009年9月16日 16:58
  • 没有签名的是不标准的……
    你可以获得outerxml之后用没有签名的encoding写到文件


    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2009年9月16日 17:10
    版主
  • "你可以获得outerxml之后用没有签名的encoding写到文件" ,这句话换成代码该怎么写啊?

    moneyriver2006
    2009年9月17日 16:12
  • string outerXml=xmlDocument.OuterXml;
    File.WriteAllLines(filename, outerXml,utf8encodingwithoutbom)


    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    • 已标记为答案 Johnny Qian 2009年9月20日 15:40
    2009年9月17日 16:45
    版主
  • 谢谢版主的帮助。
    string outerXml=xmlDocument.OuterXml;
    File.WriteAllLines(filename, outerXml,utf8encodingwithoutbom)
    用这个生成的xml的确是utf-8 不带BOM的格式。
    但是问题又来了,生成的xml被显示为一行,没有换行,更没有缩进,没办法阅读啊。

    而用XmlDocument.save()方法生成的xml格式良好,有换行和缩进。但就是没办法生成不带BOM的utf-8格式。

    真是伤脑筋啊~~~

    moneyriver2006
    2009年9月18日 11:33
  • 娜要用XmlWriter自己调整了

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    • 已标记为答案 Johnny Qian 2009年9月20日 15:40
    2009年9月18日 12:44
    版主
  • 您好,楼主,我也遇到您同样的问题,经过我的思考和摸索,终于解决了这个问题,不敢独享,遂分享一下

    UTF8Encoding utf8 = new UTF8Encoding(false);
    StreamWriter sw = 
        new StreamWriter(@"e:\~~~.txt", false, utf8);
    doc.Save(sw);            
    sw.WriteLine();

    2013年9月25日 10:21