2009-10-09 5 views
7

निम्नलिखित कोड XML घोषणा एन्कोडिंग प्रकार क्यों सेट नहीं करता है? यह हमेशा एन्कोडिंग को utf-16 पर सेट करता है। क्या मुझे कुछ बहुत याद आ रहा है?मैं XDocument XDeclaration एन्कोडिंग प्रकार को iso-8859-1 पर क्यों सेट नहीं कर सकता?

var xdoc = new XDocument(
    new XDeclaration("1.0", "iso-8859-1", null), 
    new XElement("root", "") 
); 

उत्पादन:

<?xml version="1.0" encoding="utf-16"?> 
<root></root> 

उत्तर

5

TextWriter की एन्कोडिंग निर्दिष्ट करने के बारे जवाब देखें।

एक तरफ के रूप में: ISO-8859-1 एक वर्ण-सेट है, न कि एन्कोडिंग। Unicode भी एक चरित्र सेट है, लेकिन UTF-16Unicode वर्ण का एक एन्कोडिंग बाइट्स के अनुक्रम में सेट है। आप दस्तावेज़ के एन्कोडिंग को ISO-8859-1 के रूप में निर्दिष्ट नहीं कर सकते हैं, जैसे कि आप किसी दस्तावेज़ के वर्ण-सेट को UTF-16 के रूप में निर्दिष्ट नहीं कर सकते हैं। ध्यान दें कि Unicode देशी चरित्र-सेट है और UTF-16 नेट Unicode एनईटी और जावा String कक्षाओं और टेक्स्ट-आधारित या स्ट्रिंग-आधारित संचालन दोनों के लिए एन्कोडिंग है।

+1

क्या इसका मतलब है कि XDocument का उपयोग करके अमान्य एन्कोडिंग निर्दिष्ट करने का कोई तरीका नहीं है? मैं एक तीसरे पक्ष को एक्सएमएल जमा कर रहा हूं जिसके लिए गलत घोषणा की आवश्यकता है। –

+0

मुझे यकीन है कि आप कर सकते हैं। उचित उपयोग, भाषा और कल्पना के अनुरूप क्या प्रणाली है? – yfeldblum

1

TextWriter का एन्कोडिंग जांचें जिसका आप उपयोग कर रहे हैं। here देखें।

यदि उपरोक्त लिंक काम नहीं कर रहा है, तो Google cache version अभी भी here उपलब्ध हो सकता है।

+4

"यहां" लिंक काम नहीं करता है। क्या आप कृपया अपने उत्तर में समाधान प्रदान कर सकते हैं या एक अन्य ब्लॉग पोस्ट ढूंढ सकते हैं जो बताता है कि 'टेक्स्टवाइटर' की 'एन्कोडिंग' संपत्ति को कैसे संशोधित किया जाए? –

3

जैसा कि कहा गया है, .NET एक्सएमएल/स्ट्रीम लेखन कार्यान्वयन 'उठाता है' या घोषित एक्सएमएल एन्कोडिंग के अलावा कहीं से एन्कोडिंग की व्याख्या करता है। मैं सफलतापूर्वक URL पर वर्णित के रूप में पहले Stackoverflow post

XDocument xmlDoc = new XDocument(
     new XDeclaration("1.0", "utf-8", "no"), 
     new XElement("foo", "bar")); 

MemoryStream memstream = new MemoryStream(); 
XmlTextWriter xmlwriter = new XmlTextWriter(memstream, new UTF8Encoding()); 

//'Write' (save) XDocument XML to MemoryStream-backed XmlTextWriter instance 
xmlDoc.Save(xmlwriter); 

//Read back XML string from stream 
xmlwriter.Flush();  
memstream.Seek(0, SeekOrigin.Begin); //OR "stream.Position = 0" 
StreamReader streamreader = new StreamReader(memstream); 
string xml = streamreader.ReadToEnd(); 

Console.WriteLine(xml); 
Console.WriteLine(reader.ReadToEnd()); 

मुझे आशा है कि यह किसी को मदद करता है के भीतर निहित है, एक काम कर समाधान का परीक्षण किया है।

चीयर्स

1

मैं किसी भी तरह से किसी भी काम कर जवाब यहाँ नहीं मिल रहा है, इसलिए यहाँ एक वास्तविक समाधान है जो होगा उत्पादन शीर्षक में वांछित एन्कोडिंग है:

private void CreateXml() 
    {  
     XmlTextWriter xmlwriter = new XmlTextWriter("c:\\test.xml", Encoding.GetEncoding("iso-8859-1"));   

     XDocument xdoc = new XDocument(
      new XElement("Test") 
     ); 

     xdoc.Save(xmlwriter); 
     xmlwriter.Close(); 
    } 

कारण है कि आप UTF हो रही है -16 यह है कि तारों को स्मृति में यूटीएफ -16 के साथ एन्कोड किया गया है, और जब तक आप एक्सएमएल के आउटपुट के लिए एन्कोडिंग निर्दिष्ट नहीं करते हैं, तो यह उपयोग किए जाने वाले वास्तविक एन्कोडिंग से मेल खाने के लिए एक्सएमएल हेडर में एन्कोडिंग को ओवरराइड करेगा। XmlTextWriter का उपयोग करना एक अलग एन्कोडिंग निर्दिष्ट करने का एक तरीका है।

आप XmlTextWriter को MemoryStream पर भी लिख सकते हैं और फिर इसे स्मृति में पूरे ऑपरेशन को करने की आवश्यकता होने पर इसे string पर बदल दें।

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