Skip to main content

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.

Cookies Cookie Policy

This website uses cookies to allow us to enhance your browsing experience (accessibility settings). If you continue to use this website you agree to our use of cookies.