2011-05-09 40 views
7

我想要的XML編碼是: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"?。我需要在我的代碼中更改什麼?

回答

8

只要你輸出的直接XML爲String(通過StringBuilderStringWriter),你會總是得到UTF-8或UTF-16 encondings。這是因爲strings in .NET are internally represented as Unicode characters

爲了得到正確的編碼,你必須切換到二進制輸出,如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(); 
    } 
} 

相關資源: