Diskuze: XmlDocument - UTF 16 místo UTF-8

C# .NET .NET (C# a Visual Basic) XmlDocument - UTF 16 místo UTF-8 American English version English version

Avatar
Petr Nymsa
Redaktor
Avatar
Petr Nymsa:

Ahoj, nevím proč a ani po X minutách na Google nemůžu příjít na to jak donutit StringWriter aby mi neměnil deklaraci u XML. Pomocí XmlDocument si vytvořím XML a jen v programu s ním chci dál pokračovat. Nikam ho nechci ukládat. Proto si ho přečtu pomocí StringWriteru a uložím do StrinBuilderu.

Problém je že StringWriter vnitřně funguje s UTF-16 a nevím jak ho donutit přepnout se na UTF-8. Jediná možnost je podědit StringWriter a natvrdo mu nastavit property Encoding na UTF-8. Stejně si s tím neporadí ani XmlWriter

Nějaká rada ? :) Díky

XmlDocument doc = new XmlDocument();
          XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", "utf-8", null);
          doc.AppendChild(declaration);
          XmlElement root = doc.CreateElement(table);

          foreach (KeyValuePair<string,object> u in values)
          {
              XmlElement node = doc.CreateElement(u.Key);
              node.InnerText = u.Value.ToString();
              root.AppendChild(node);
          }

          doc.AppendChild(root);
          StringBuilder sb = new StringBuilder();
          using(XmlWriter writer = XmlWriter.Create(sb))
          {
              doc.Save(writer);
          }
Odpovědět 3.5.2014 11:17
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Petr Nymsa
Redaktor
Avatar
Petr Nymsa:

Tak opět jednodušší než se zdálo. Místo zkoušení vnutit StringWriteru jiné kódování stačí šáhnout po property XmlDocumentu - OuterXml. To vám vrátí přesně to XML které jste si nadeklarovali.

Nahoru Odpovědět 3.5.2014 11:27
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Petr Nymsa
Michal Žůrek (misaz):

nejsem si jistý, ale mám pocit že by to mělo jít ukládat i úplně bez builderu. Místo builderu bych mu předal stream IO.StreamWriter.

Nahoru Odpovědět 3.5.2014 11:27
Nesnáším {}, proto se jim vyhýbám.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.