代码之家  ›  专栏  ›  技术社区  ›  Prix Winteroo

UTF-8大写?

  •  12
  • Prix Winteroo  · 技术社区  · 14 年前

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

            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();
    
    1 回复  |  直到 6 年前
        1
  •  20
  •   edtheprogrammerguy    6 年前

    我找到了 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保存方法的目标。

    // 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);
    }