Почему Xdocument дает мне объявление utf16?
Я создаю XDocument следующим образом:
XDocument doc = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"));
когда я сохраняю документ как это (doc.Save(@"c:\tijd\file2.xml");
), я получаю следующее:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
что нормально.
но я хочу вернуть содержимое как xml, и я нашел следующий код:
var wr = new StringWriter();
doc.Save(wr);
string s = (wr.GetStringBuilder().ToString());
этот код работает, но затем строка 's' начинается с этого:
<?xml version="1.0" encoding="utf-16" standalone="yes"?>
поэтому он изменился с utf8 на utf16, и это не то, что я хочу, потому что теперь я не могу прочитать его в Internet Explorer.
Есть ли способ предотвратить это поведение?
Ответы
Ответ 1
StringWriter
рекламирует себя как использование UTF-16. Это легко исправить:
public class Utf8StringWriter : StringWriter
{
public override Encoding Encoding { get { return Encoding.UTF8; } }
}
Этого должно быть достаточно в вашем конкретном случае. Более корректная реализация:
- У конструкторов, соответствующих тем, которые находятся в
StringWriter
- Разрешить кодировку также указывать в конструкторе
Ответ 2
Очень хороший ответ, используя наследование, просто не забудьте переопределить инициализатор
public class Utf8StringWriter : StringWriter
{
public Utf8StringWriter(StringBuilder sb) : base (sb)
{
}
public override Encoding Encoding { get { return Encoding.UTF8; } }
}
Ответ 3
Вам нужно будет установить StreamWriter.Encoding
для использования UTF-8 вместо Unicode (UTF-16)
Увидев, что это не StreamWriter, этот ответ остается только для потомков.