2011-05-09 18 views
7

Quiero que la codificación XML que se va:serialización XML y codificación

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

Para generar codificación como encoding="windows-1252" escribí este código.

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

Pero todavía no recibo la codificación esperada ¿Qué me falta? Guíeme para generar una codificación como encoding="windows-1252"?. ¿Qué debo cambiar en mi código?

Respuesta

8

Siempre que imprima XML directamente en String (a través de StringBuilder o StringWriter) siempre obtendrá UTF-8 o UTF-16. Esto es porque strings in .NET are internally represented as Unicode characters.

Para obtener la codificación correcta, tendrá que cambiar a una salida binaria, como Stream.

Aquí está un ejemplo rápido:

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

recursos relacionados: