Ich habe den folgenden Code:
var doc = new XmlDocument();
XmlDeclaration xmlDeclaration = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
doc.AppendChild(xmlDeclaration);
XmlElement root = doc.CreateElement("myRoot");
doc.AppendChild(root);
root.InnerText = "myInnerText";
StringWriter sw = new StringWriter();
doc.Save(sw);
Console.WriteLine(sw.ToString());
Console.WriteLine();
MemoryStream ms = new MemoryStream();
doc.Save(ms);
Console.WriteLine(Encoding.ASCII.GetString(ms.ToArray()));
Und hier ist das Ergebnis:
<?xml version="1.0" encoding="utf-16"?>
<myRoot>myInnerText</myRoot>
???<?xml version="1.0" encoding="UTF-8"?>
<myRoot>myInnerText</myRoot>
Im Grunde genommen wird eine Xml-Datei erstellt und die Kodierung auf utf8 gesetzt, aber beim Speichern in stringwriter wird die Kodierung ignoriert und utf16 verwendet. Bei der Verwendung eines Speicherstroms wird jedoch utf8 (mit den zusätzlichen BOM-Zeichen) verwendet.
Warum ist das so? Warum wird meine explizite Kodierungseinstellung von utf-8 nicht beachtet?
Herzlichen Dank!
0 Stimmen
Nur neugierig, haben Sie versuchen, geben null/string.empty in der Codierung und sehen?
0 Stimmen
Wenn ich das tue, ist der Stringwriter immer noch utf16, und der Memorystream hat keine Kodierung in seiner Deklaration.
0 Stimmen
Es sieht z.B. so aus: <?xml version="1.0"?>