簡體   English   中英

.Net XmlWriter - 意外的編碼讓我感到困惑

[英].Net XmlWriter - unexpected encoding is confusing me

環境是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”/

為什么我在這里生成了錯誤的編碼? 我究竟做錯了什么 ?

我懷疑這是因為它正在寫一個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; }
    }
}

.Net字符串以Unicode(UTF-16)編碼。 我希望這是你的編碼問題的根源,因為你正在寫一個StringBuilder。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM