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))
{
     // ...
}
Jérémy Jeanson

Comments

You have to be logged in to comment this post.