pátek 10. srpna 2012

C# a tvorba XML s kódováním UTF-8

C# a tvorba XML s kódováním UTF-8

Ačkoli má XmlWriter defaultně nastavené kódování v UTF-8, né vždy je tomu tak. Sám jsem se dostal do situace, kdy mi vracel XML dokument s hlavičkou:

<?xml version="1.0" encoding="utf-16"?>

Dlouho jsem hledal postup, jakým způsobem donutit writer, aby vytvářel dokument v UTF-8. Nakonec jsem našel jeden způsob, který vám nyní ukážu.

public class StringWriterUtf8 : StringWriter
    {
        public StringWriterUtf8(StringBuilder builder)
            : base(builder)
        {
        }

        public override Encoding Encoding
        {
            get { return Encoding.UTF8; }
        }
    }

Díky tomu jsme si vytvořili třídu pro string writer, která bude vždy vracet formátování v UTF-8. Nyní si tedy tuto třídu zavoláme a vytvoříme si XML dokument:


XmlWriterSettings settings = new XmlWriterSettings();
        settings.Indent = true;
        StringBuilder builder = new StringBuilder();
        StringWriterUtf8 sw = new StringWriterUtf8(builder);

        using (XmlWriter w = XmlWriter.Create(sw, settings))
        {
            w.WriteStartDocument();

            //Hlavička XML Dokumentu
            w.WriteStartElement("Merchant-PP3M_POS");

            w.WriteAttributeString("version", "1.00.000");
            w.WriteAttributeString("poradove_cislo", kniha.id);

            w.WriteStartElement("Knihovna");

            w.WriteStartElement("Kniha");
            w.WriteElementString("Titul", kniha.titul);
            w.WriteElementString("Autor", kniha.autorJmeno);
            w.WriteElementString("Vydavatelství", kniha.vydavatel);
            w.WriteEndElement();

         //Ukončíme Knihovna
            w.WriteEndElement();

            //Ukončí XML Dokument
            w.WriteEndElement();
            w.WriteEndDocument();
            w.Flush();
            w.Close();
        }

A to je fonkční řešení tohoto problému.

Žádné komentáře:

Okomentovat