Le morceau de code suivant (coupé par souci de brièveté) génère un document xml et le recrache dans un fichier. Si j'ouvre le fichier dans Visual Studio, il semble être en caractères chinois. Si je l'ouvre dans le Bloc-notes, il semble comme prévu. Si je Console.WriteLine il semble correct.ne peut pas comprendre ces malheurs de codage xml
Je sais que c'est lié au codage, mais je pensais que j'avais tous les canards d'encodage dans une rangée. Qu'est-ce qui manque?
StringBuilder stringBuilder = new StringBuilder();
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.Unicode;
settings.Indent = true;
settings.IndentChars = "\t";
using (XmlWriter textWriter = XmlWriter.Create(new StringWriter(stringBuilder), settings))
{
textWriter.WriteStartElement("Submission");
textWriter.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance");
textWriter.WriteEndElement();
}
using (StreamWriter sw = new StreamWriter(new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None)))
{
sw.Write(stringBuilder.ToString());
}
Donc le résultat du StringWriter est une chaîne unicode de 16 bits et qui sera encodée avec UTF-8, puis écrite sur le disque? –
Eh bien, le résultat de StringWriter sera une chaîne unicode quoi qu'il arrive, car c'est ce que .NET utilise comme format de chaîne. Le problème est que la déclaration XML au début du fichier indiquera qu'il utilise UTF-16, même s'il utilise vraiment UTF-8. –
J'ai fini par ajouter Encoding.Unicode comme second paramètre sur le constructeur StringWriter. Cela semble avoir fait l'affaire. En quoi cela diffère-t-il de votre approche de dérivation de StringWriter? –