2009-05-14 11 views
6

मैं निम्नलिखित कोड है:XmlWriter एन्कोडिंग मुद्दों

MemoryStream ms = new MemoryStream(); 
    XmlWriter w = XmlWriter.Create(ms); 

    w.WriteStartDocument(true); 
    w.WriteStartElement("data"); 

    w.WriteElementString("child", "myvalue"); 

    w.WriteEndElement();//data 
    w.Close(); 
    ms.Close(); 

    string test = UTF8Encoding.UTF8.GetString(ms.ToArray()); 

एक्सएमएल सही ढंग से उत्पन्न होता है; हालांकि, मेरी समस्या स्ट्रिंग 'टेस्ट' का पहला अक्षर है (char # 239), जो इसे कुछ एक्सएमएल पार्सर्स में अमान्य बनाता है: यह कहां से आ रहा है? मैं गलत तरीके से क्या कर रहा हूँ?

मैं मैं सिर्फ पहले वर्ण के बाद शुरू करने से समस्या को हल कर सकते हैं पता है, लेकिन मैं नहीं बल्कि जानते होंगे क्यों यह बस समस्या से अधिक पैच से नहीं है।

धन्यवाद!

उत्तर

13

यहाँ एक समाधान मिला: http://www.timvw.be/generating-utf-8-with-systemxmlxmlwriter/

मैं शीर्ष पर इस याद आ रही थी:

XmlWriterSettings xmlWriterSettings = new XmlWriterSettings(); 
xmlWriterSettings.Encoding = new UTF8Encoding(false); 
MemoryStream ms = new MemoryStream(); 
XmlWriter w = XmlWriter.Create(ms, xmlWriterSettings); 

हर किसी को मदद के लिए धन्यवाद!

+2

+1 आउटपुट के लिए प्राप्त करना था। बीओएम ने मुझे फिर से मिला। धन्यवाद। – bendewey

+0

बीओएम मुझे हर बार प्राप्त करता है ... डिफ़ॉल्ट एन्कोडिंग .UTF8 में बीओएम शामिल है। –

0

आप इस तरह एनकोडिंग बदल सकते हैं:

w.Settings.Encoding = Encoding.UTF8; 
+0

.Settings.Encoding में 2 के टुकड़े मिल गया है है;:

यहाँ एक समाधान है मुझे विश्वास नहीं है कि – John

+0

काम करेगा क्या आप निश्चित हैं? एमएसडीएन को देखते हुए संपत्ति दोनों प्राप्त/सेट का समर्थन करती है लेकिन मैंने कोशिश नहीं की है, मुझे पता है कि यह वहां है:/ – Lloyd

+0

हाँ। यह आपको इसे सेट करने की अनुमति देता है; हालांकि, इसका परिणाम रन-टाइम त्रुटि (संकलन त्रुटि नहीं) – John

2

समस्या अपने लेखक द्वारा उत्पन्न एक्सएमएल है UTF- 16 जबकि आप इसे स्ट्रिंग में बदलने के लिए यूटीएफ -8 का उपयोग करते हैं। ऐसा करें:

StringBuilder sb = new StringBuilder(); 
using (StringWriter writer = new StringWriter(sb)) 
using (XmlWriter w = XmlWriter.Create(writer)) 
{ 
    w.WriteStartDocument(true); 
    w.WriteStartElement("data"); 

    w.WriteElementString("child", "myvalue"); 

    w.WriteEndElement();//data 
} 

string test = sb.ToString(); 
+0

यूटीएफ -8 का कारण xmlwriter को 'एन्कोडिंग = utf8' – John

0

ये सब, थोड़ा बंद कर रहे हैं यदि आप बाइट क्रम चिह्न (जैसे दृश्य स्टूडियो UTF8 एन्कोडेड एक्सएमएल का पता लगाने और वाक्य रचना ठीक से प्रकाश डाला के रूप में) कुछ संपादकों इस्तेमाल होता है के बारे में परवाह। केवल पढ़ने के लिए

MemoryStream stream = new MemoryStream(); 

XmlWriterSettings settings = new XmlWriterSettings(); 
settings.Encoding = Encoding.UTF8; 
settings.Indent = true; 
settings.IndentChars = "\t"; 

using (XmlWriter writer = XmlWriter.Create(stream, settings)) 
{ 
    // ... write 

    // Make sure you flush or you only get half the text 
    writer.Flush(); 

    // Use a StreamReader to get the byte order correct 
    StreamReader reader = new StreamReader(stream,Encoding.UTF8,true); 
    stream.Seek(0, SeekOrigin.Begin); 
    result = reader.ReadToEnd(); 
} 

मैं पूरी here

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