11
votes

Comment puis-je forcer xdocument à produire "UTF-8" dans la ligne de déclaration?

Le code suivant produit cette sortie: xxx

Comment puis-je obtenir pour produire coding = "utf-8" au lieu de au lieu de Encodage = "utf-16" ? xxx


0 commentaires

3 Réponses :


17
votes

Permettez-moi de répondre à ma propre question, cela semble fonctionner: xxx


3 commentaires

Semble être un bug dans l'API pour moi que le sérialiseur ignore cette valeur dans votre xDeclaration .


@Kirkwoll Pas vraiment, car le codage par défaut pour XML est UTF8 afin qu'il puisse être omis. Par conséquent, il pose la question de savoir pourquoi la nécessité d'écrire explicitement UTF-8. Le problème était probablement de l'UTF-16 étant là, pas qu'il n'y avait pas UTF-8.


Voir aussi thread Comment imprimer Utilisation xdocument .



18
votes

Ce n'est pas un bogue dans .NET. Ceci est dû à vous en utilisant StringWriter comme cible de votre xdocument. Étant donné que StringWriter utilise en interne UTF-16, le document doit également utiliser UTF-16 comme encodage. Si vous enregistrez le XDOC à un flux ou à un fichier, il utilisera UTF-8 comme indiqué.

Pour plus d'informations, voir INFORMATIONS MSDN sur StringWriter.Encoding :

Cette propriété est nécessaire pour certains scénarios XML où un en-tête doit être écrit contenant le codage utilisé par le StringWriter. Cela permet au code XML de consommer un stritter arbitraire et de générer l'en-tête XML correct.


0 commentaires

0
votes

Vous pouvez utiliser le code suivant comme exemple

XDocument doc = GetXmlDoc();
using (var stream = new MemoryStream())
{
    doc.Save(stream, SaveOptions.DisableFormatting);
    var docBytes = stream.ToArray();
    File.WriteAllBytes("fileName.xml", docBytes);
}


0 commentaires