XML序列化和编码

8
我希望将XML编码设置为:
<?xml version="1.0" encoding="windows-1252"?>

为了生成像 encoding="windows-1252" 这样的编码,我编写了以下代码。
var myns = OS.xmlns;
using (var stringWriter = new StringWriter())
{
    var settings = new XmlWriterSettings
    {
        Encoding = Encoding.GetEncoding(1252),
        OmitXmlDeclaration = false
    };
    using (var writer = XmlWriter.Create(stringWriter, settings))
    {
        var ns = new XmlSerializerNamespaces();
        ns.Add(string.Empty, myns);
        var xmlSerializer = new XmlSerializer(OS.GetType(), myns);
        xmlSerializer.Serialize(writer, OS,ns);
    }
    xmlString= stringWriter.ToString();
}

但我仍然没有得到我期望的编码,我错过了什么?请指导我如何生成像 encoding="windows-1252" 这样的编码。我需要在我的代码中做哪些更改?

1个回答

9
只要您直接将XML输出到String(通过StringBuilderStringWriter),您将始终获得UTF-8或UTF-16编码。这是因为.NET中的字符串在内部表示为Unicode字符
为了获得正确的编码,您需要切换到二进制输出,例如Stream
下面是一个快速示例:
var settings = new XmlWriterSettings
{
    Encoding = Encoding.GetEncoding(1252)
};

using (var buffer = new MemoryStream())
{
    using (var writer = XmlWriter.Create(buffer, settings))
    {
        writer.WriteRaw("<sample></sample>");
    }

    buffer.Position = 0;

    using (var reader = new StreamReader(buffer))
    {
        Console.WriteLine(reader.ReadToEnd());
        Console.Read();
    }
}

相关资源:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接