当前位置:  开发笔记 > 编程语言 > 正文

.Net XmlWriter - 意外的编码让我感到困惑

如何解决《.NetXmlWriter-意外的编码让我感到困惑》经验,为你挑选了1个好方法。

环境是VS2008,.Net 3.5

以下C#代码(注意UTF8的指定编码)

XmlWriterSettings settings = new XmlWriterSettings ();
StringBuilder sb  = new StringBuilder();
settings.Encoding = System.Text.Encoding.UTF8;
settings.Indent   = false;
settings.NewLineChars = "\n";
settings.ConformanceLevel =  System.Xml.ConformanceLevel.Document;

XmlWriter writer = XmlWriter.Create (sb, settings);
{
   // Write XML data.
   writer.WriteStartElement ("CCHEADER");
   writer.WriteAttributeString ("ProtocolVersion", "1.0.0");
   writer.WriteAttributeString ("ServerCapabilities", "0x0000000F");
   writer.WriteEndElement ();
   writer.Flush ();
}

实际上生成XML(> <省略,因为它们上面有SO barfs):

?xml version ="1.0"encoding ="utf-16"?
CCHEADER ProtocolVersion ="1.0.0"ServerCapabilities ="0x0000000F"/

为什么我在这里生成了错误的编码?我究竟做错了什么 ?



1> Jon Skeet..:

我怀疑这是因为它正在写一个StringBuilder,它本身就是UTF-16.另一种方法是创建一个派生自StringWriter的类,但它会覆盖Encoding属性.

我相信我在MiscUtil中有一个- 但无论如何写它都是微不足道的.像这样的东西:

public sealed class StringWriterWithEncoding : StringWriter
{
    private readonly Encoding encoding;

    public StringWriterWithEncoding (Encoding encoding)
    {
        this.encoding = encoding;
    }

    public override Encoding Encoding
    {
        get { return encoding; }
    }
}

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有