Problèmes de XmlWriter avec UTF-8 ?
Par défaut, le XmlWriter encode le XML qu’il produit en UTF-16. Ce qui n’est pas forcement ce que l’on voudrait. Même si l’UTF-16 offre plus de possibilités que l’UTF-8 (exemple : pouvoir utiliser une table de caractère indienne), si l’on vous demande de produire exclusivement de l’UTF-8, ce n’est pas exploitable ainsi. Si l’on tente de pousser de l’UTF-8 dans de l’UTF-16, il arrive d’avoir des caractères mal formatés (déjà vécu, et il est très agacent d’avoir à en chercher la raison)
Heureusement, il existe des options qui permettent de forcer l’encodage. Malheureusement, ces options peuvent être mal utilisées. Ce qui a pour incidence de ne pas contraindre la table d’encodage. Pour notre plus grand malheur, cela ne produit pas d’exception.
Commençons donc à voir le code à ne pas utiliser : On utilise System.Text.Encoding.UTF8, comme on peut le faire dans de nombreuses citations.
var settings = new XmlWriterSettings
{
Encoding = System.Text.Encoding.UTF8
};
using (XmlWriter writer = XmlWriter.Create(stream, settings))
{
// ...
}
Le code qui fonctionne est le suivant : On utilise System.Text. UTF8Encoding, sans demander la création de l’identifiant UTF8 vu que l’on peut être amené à le faire dans le code qui suit.
var settings = new XmlWriterSettings
{
Encoding = new System.Text.UTF8Encoding(false)
};
using (XmlWriter writer = XmlWriter.Create(stream, settings))
{
// ...
}