2017-03-03 11 views
5

मैं एक xml फ़ाइल उत्पादन के लिए सी # का उपयोग कर रहा हूँ और मैं UTF-8 में एक्सएमएल एन्कोडिंग मान सेट करने की कोशिश कर, लेकिन इसके वर्तमान outputting:XmlWriter एन्कोडिंग UTF-8 सी # में StringWriter का उपयोग कर

<?xml version="1.0"?> 

यह मेरा कोड:

public sealed class StringWriterWithEncoding: StringWriter { 
    private readonly Encoding encoding; 

    public StringWriterWithEncoding(Encoding encoding) { 
     this.encoding = encoding; 
    } 

    public override Encoding Encoding { 
     get { 
      return encoding; 
     } 
    } 
} 

private string GetXml(JobStore jobStore) { 
    StringWriterWithEncoding sw = new StringWriterWithEncoding(); 
    XmlWriterSettings settings = new XmlWriterSettings(); 
    settings.Encoding = Encoding.UTF8; 
    settings.Encoding = Encoding.GetEncoding("utf-8"); 
    settings.Indent = true; 
    using(var writer = XmlWriter.Create(sw, settings)) { 
     writer.WriteStartDocument(); 
     writer.WriteStartElement("resources"); 

     writer.WriteStartElement("string"); 
     writer.WriteAttributeString("name"); 
     writer.WriteCData("value"); 
     writer.WriteEndElement(); 

     writer.WriteEndElement(); 
     writer.WriteEndDocument(); 
    } 
    return sw.ToString(); 
} 

कुछ आसान होना चाहिए मुझे याद आ रही है?

+0

आप .NETFiddle पर अपने कोड बता सकते हैं? – aloisdg

+1

[इस उत्तर] से 'Utf8StringWriter') (https://stackoverflow.com/questions/955611/xmlwriter-to-write-to-a-string-instead-of-to-a-file/955698#955698) काम करना चाहिए । – dbc

+1

आपका कोड संकलित नहीं करता है - 'स्ट्रिंगवाइटर विथ एन्कोडिंग' में पैरामीटर रहित कन्स्ट्रक्टर नहीं है। या, हो सकता है कि आपके पास वास्तव में संस्करण में पैरामीटर रहित कन्स्ट्रक्टर है जो 'एन्कोडिंग' को अपने डिफ़ॉल्ट (शून्य) मान पर छोड़ देता है, जिसका अर्थ है 'एन्कोडिंग' शून्य वापस आता है? यह आपकी समस्या को समझाएगा। वैसे भी, अगर मैं 'StringWriterWithEncoding sw = new StringWriterWithEncoding (Encoding.UTF8) करता हूं; 'सबकुछ ठीक से काम करता है। नमूना [fiddle] (https://dotnetfiddle.net/JxACgB)। – dbc

उत्तर

7

आपका कोड संकलन नहीं करता है - StringWriterWithEncoding एक parameterless निर्माता नहीं है। या, अगर इसमें पैरामीटर रहित कन्स्ट्रक्टर है, तो शायद यह वास्तव में ऐसा दिखता है?

public sealed class StringWriterWithEncoding : StringWriter 
{ 
    private readonly Encoding encoding; 

    public StringWriterWithEncoding() { } 

    public StringWriterWithEncoding(Encoding encoding) 
    { 
     this.encoding = encoding; 
    } 

    public override Encoding Encoding 
    { 
     get { return encoding; } 
    } 
} 

यदि हां, तो यह आपकी समस्या की व्याख्या करता है - क्षेत्र encoding उसके डिफ़ॉल्ट (शून्य) मूल्य पर छोड़ दिया गया है, जिसका अर्थ है Encoding रिटर्न अशक्त, और इसलिए कोई एन्कोडिंग एक्सएमएल फ़ाइल में दिखाई देगा।

इसे ठीक करने के लिए, parameterless निर्माता को खत्म करने, और कार्य करें:

var sw = new StringWriterWithEncoding(Encoding.UTF8); 

या parameterless निर्माता स्पष्ट रूप से Encoding.UTF8 स्थापित करने के लिए बदलने के लिए:

public sealed class StringWriterWithEncoding : StringWriter 
{ 
    private readonly Encoding encoding; 

    public StringWriterWithEncoding() : this(Encoding.UTF8) { } 

    public StringWriterWithEncoding(Encoding encoding) 
    { 
     this.encoding = encoding; 
    } 

    public override Encoding Encoding 
    { 
     get { return encoding; } 
    } 
} 
1

बस StringWriterWithEncoding के बजाय XmlWriter के लिए आउटपुट फ़ाइल नाम का उपयोग करें:

var settings = new XmlWriterSettings 
{ 
    Encoding = Encoding.UTF8, 
    Indent = true 
}; 

using (var writer = XmlWriter.Create(filePathName, settings)) 
{ 
    ... 
संबंधित मुद्दे