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"?>
Vous devez vous connecter pour publier un commentaire.
Parce que tout ce que vous faites est la fixation d'un élément XML qui indique que c'est de l'UTF-8, vous n'êtes pas réellement de l'enregistrer en UTF-8. Vous devez définir le flux de sortie à utiliser l'UTF-8, comme ceci:
Une fois que vous faites cela, vous n'avez même pas à ajouter la déclaration XML. Il figure sur son propre. Si vous voulez l'enregistrer dans un MemoryStream, utiliser un StreamWriter qui enveloppe le MemoryStream.
J'utilise la méthode suivante, il écrit assez et en UTF-8
L'appeler comme:
De la MSDN nous pouvons le voir...
Si vous souhaitez utiliser l'encodage à partir de la XmlDeclaration vous aurez besoin d'utiliser un flux de données pour enregistrer le document.