2011-05-09 3 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 (StringBuilder 또는 StringWriter 통해)로 직접 출력하는 경우에는 항상 UTF-8 또는 UTF-16 조합이 사용됩니다. 이는 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(); 
    } 
} 

관련 리소스 :