2011-05-09 37 views
7

i xml kodlama olmak istiyorum:xml seri hale ve kodlama

<?xml version="1.0" encoding="windows-1252"?> 

Bu kodu yazmış encoding="windows-1252" gibi kodlama oluşturmak için.

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(); 
} 

Ancak hala neyi eksik özlediğimi kodlayamıyorum? Lütfen encoding="windows-1252"? gibi kodlama oluşturmak için bana yol göster. Kodumda değiştirmek için neye ihtiyacım var?

cevap

8

XML'i doğrudan bir String (StringBuilder veya bir StringWriter aracılığıyla) çıktğınız sürece, her zaman UTF-8 veya UTF-16 koşullarını alırsınız. Bunun nedeni strings in .NET are internally represented as Unicode characters.

Uygun kodlamayı elde etmek için gibi bir ikili çıkışa geçiş yapmanız gerekir, örneğin Stream. İşte

hızlı bir örnek:

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(); 
    } 
} 

İlgili kaynaklar:

İlgili konular