Lors de l'enregistrement d'un XmlDocument, il ignore l'encodage dans le XmlDeclaration (UTF8) et utilise UTF16

j'ai le code suivant:

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()));

Et voici le résultat:

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

???<?xml version="1.0" encoding="UTF-8"?>
<myRoot>myInnerText</myRoot>

Fondamentalement, ce qu'il fait, c'est de faire un fichier xml, et définir l'encodage en utf8, mais quand il s'enregistre à stringwriter il ignore mon encodage et utilise utf16. Cependant, lors de l'utilisation d'un flux de mémoire, il utilise utf8 (avec le supplément de la NOMENCLATURE caractères)

Pourquoi est-ce? Pourquoi n'est-il pas honorer mon explicite paramètre d'encodage de caractères utf-8?

Merci beaucoup

  • Juste par curiosité, avez-vous essayer de donner à null/chaîne.vide dans l'encodage et de la voir??
  • Si je fais ça, la stringwriter est encore utf16, et memorystream n'a pas de codage dans sa déclaration.
  • par exemple. il ressemble à ceci: <?xml version="1.0"?>
InformationsquelleAutor Chris | 2010-11-02