2013-02-07 57 views
6

मेरे पास एक्सएमएल है जिसे मैं एपीआई द्वारा दूसरे पुनरुत्थान में भेजता हूं। मैं XDocument द्वारा इसे बनाने:टेक्स्टवाइटर ऑब्जेक्ट में एन्कोडिंग कैसे बदलें?

XDocument xDoc = new XDocument(
    new XDeclaration("1.0", "utf-8", "yes"), 
    new XElement("Entity",new XAttribute("Type", "attribute1"), 
     new XElement("Fields",... 

जब मैं यह अनुरोध यह घोषणा के बिना भेजा है में डाल दिया। तो मैं आगे करता हूं:

StringBuilder builder = new StringBuilder(); 
TextWriter writer = new StringWriter(builder); 

using (writer) 
{ 
    xDoc.Save(writer); 
} 

लेकिन अब टेक्स्टवाइटर xml में utf-16 में एन्कोडिंग बदलता है। मुझे इसे यूटीएफ -8 पर फिर से बदलना होगा।

उत्तर

13

यह अजीब लगता है की कोशिश करो, लेकिन जैसे आप StringWriter उपवर्ग अगर आप एक्सएमएल में UTF-8 एन्कोडिंग के साथ एक string लिए उत्पादन करना चाहते हैं यह लग रहा है।

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     XDocument xDoc = new XDocument(
      new XDeclaration("1.0", "utf-8", "yes"), 
      new XElement("Entity",new XAttribute("Type", "attribute1"))); 

     StringBuilder builder = new StringBuilder(); 
     using (TextWriter writer = new EncodingStringWriter(builder, Encoding.UTF8)) 
     { 
      xDoc.Save(writer); 
     } 

     Console.WriteLine(builder.ToString()); 
    } 
} 

public class EncodingStringWriter : StringWriter 
{ 
    private readonly Encoding _encoding; 

    public EncodingStringWriter(StringBuilder builder, Encoding encoding) : base(builder) 
    { 
     _encoding = encoding; 
    } 

    public override Encoding Encoding 
    { 
     get { return _encoding; }     
    } 
} 
4

TextWriter ws = new StreamWriter(path, true, Encoding.UTF8); 

या

TextWriter ws = new StreamWriter(stream, Encoding.UTF8); 
+1

या 'Encoding.GetEncoding (1256)' आप एक विशिष्ट कोड पेज की जरूरत है (1256 अरबी है) – BlueChippy

+0

'StreamWriter' स्पष्ट समाधान की तरह लगता है, हाँ; यह सब कुछ है, 'टेक्स्टवाइटर' के विशिष्ट एन्कोडिंग-अनुकूलन कार्यान्वयन, 'XDocument.Save' द्वारा अपेक्षित प्रकार। यहां तक ​​कि स्ट्रिंग पर वापस जाने के लिए भी (लेकिन एक्सएमएल घोषणा सही हो रही है) मैं बस 'मेमोरीस्ट्रीम' पर इसका उपयोग करता हूं। – Nyerguds

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^