.NET的XmlWriter - 意外编码困惑我 [英] .Net XmlWriter - unexpected encoding is confusing me

查看:130
本文介绍了.NET的XmlWriter - 意外编码困惑我的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

环境是VS2008,净3.5

Environment is VS2008, .Net 3.5

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

The following C# code (note the specified encoding of 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对他们的):

Actually generates the XML (>< omitted because SO barfs on them):

?XML版本=1.0编码=UTF-16?结果
CCHEADER ProtocolVersion =1.0.0ServerCapabilities =0x0000000F /

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

我为什么会在这里产生了错误的编码?我在做什么错了?

Why do I get the wrong encoding generated here ? What am I doing wrong ?

推荐答案

我怀疑这是因为它写一个StringBuilder,这本质上是UTF-16。另一种方法来克服这个是创建的StringWriter派生的类,但它覆盖Encoding属性。

I suspect it's because it's writing to a StringBuilder, which is inherently UTF-16. An alternative to get round this is to create a class derived from StringWriter, but which overrides the Encoding property.

我相信我已经得到了一个在的MiscUtil - 但它相当琐碎反正写。事情是这样的:

I believe I've got one in MiscUtil - but it's pretty trivial to write anyway. Something like this:

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

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

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

这篇关于.NET的XmlWriter - 意外编码困惑我的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆