【问题标题】:utf-8 in uppercase?大写的UTF-8?
【发布时间】:2010-11-27 11:11:01
【问题描述】:

这更像是我想做的一个装饰性更改,我想知道如何使生成的 xml 文件使用 UTF-8 大写而不是 utf-8 小写?

        XmlWriterSettings settings = new XmlWriterSettings();
        settings.Encoding = Encoding.UTF8;
        settings.Indent = true;
        settings.IndentChars = "\t";

        XmlWriter writeXML = XmlWriter.Create("test_file.xml", settings);
        writeXML.WriteStartDocument(false);
        writeXML.WriteComment(fileLicense);
        writeXML.WriteStartElement("templates");
        writeXML.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance");
        writeXML.WriteAttributeString("xsi", "noNamespaceSchemaLocation", null, "test_file.xsd");
        writeXML.WriteEndElement();
        writeXML.WriteEndDocument();
        writeXML.Close();

【问题讨论】:

    标签: c# xml formatting


    【解决方案1】:

    我找到了this blog post。看来这就是你想要的。

    public class UpperCaseUTF8Encoding : UTF8Encoding
    {
      // Code from a blog http://www.distribucon.com/blog/CategoryView,category,XML.aspx
      //
      // Dan Miser - Thoughts from Dan Miser
      // Tuesday, January 29, 2008 
      // He used the Reflector to understand the heirarchy of the encoding class
      //
      //      Back to Reflector, and I notice that the Encoding.WebName is the property used to
      //      write out the encoding string. I now create a descendant class of UTF8Encoding.
      //      The class is listed below. Now I just call XmlTextWriter, passing in
      //      UpperCaseUTF8Encoding.UpperCaseUTF8 for the Encoding type, and everything works
      //      perfectly. - Dan Miser
    
      public override string WebName
      {
        get { return base.WebName.ToUpper(); }
      }
    
      public static UpperCaseUTF8Encoding UpperCaseUTF8
      {
        get
        {
          if (upperCaseUtf8Encoding == null) {
            upperCaseUtf8Encoding = new UpperCaseUTF8Encoding();
          }
          return upperCaseUtf8Encoding;
        }
      }  
    
      private static UpperCaseUTF8Encoding upperCaseUtf8Encoding = null;
    }
    

    要使用此自定义编码,您需要使用 XMLTextWriter 作为 XDocument Save 方法的目标。

    // This section not shown in the blog
    
    var xDoc = XDocument.Load(xmlDocNm); //This is your xml path value 
    // Changes to XML Document here
    
    // .Net writes the XML declaration using lower case utf-8.
    //  <?xml version="1.0" encoding="utf-8"?>
    // It is not suppesed to matter but NiceForm expects the delcaration to be uppercase.
    //  <?xml version="1.0" encoding="UTF-8"?>
    // We are using a XMLWriter with a custom Encoding to captialize the UTF
    
    // Set various options to retrive the desired output
    var settings = new XmlWriterSettings {
      Encoding = new UpperCaseUTF8Encoding(), // Key setting option for this example
    
      NewLineHandling = System.Xml.NewLineHandling.Replace,
      NewLineOnAttributes = true,
      Indent = true                           // Generate new lines for each element
    };
    
    using (var xmlWriter =XmlTextWriter.Create(xmlDocNm, settings)) {
      xDoc.Save(xmlWriter);
    }
    

    【讨论】:

    • 谢谢!我在我编写的 Xml 类中使用了您的代码。它也做其他事情,例如允许以 UTF-8 或 UTF-16 输出,并使 Xml 变得漂亮或线性化。 rhyous.com/2015/04/07/…
    【解决方案2】:
    writeXML.WriteProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"");
    

    【讨论】:

    • 欢迎来到 StackOverflow。请提供一些解释,为什么认为您提出的解决方案可能对 OP 有所帮助。不要在没有解释的情况下发布代码。
    猜你喜欢
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多