Проблема в том, что вы записываете его на диск с использованием UTF-8, но будет утверждать, что будет UTF-16, потому что это то, что StringWriter
использует по умолчанию - и поскольку вы явно устанавливаете для него значение Encoding.Unicode
.
Самый простой способ исправить это - использовать StringWriter, который объявляет себя как UTF-8:
public class Utf8StringWriter : StringWriter
{
public override Encoding
{
get { return Encoding.UTF8; }
}
}
... и затем удалите строку settings.Encoding = Encoding.Unicode
. Таким образом, вы будете использовать UTF-8 повсюду. (На самом деле, свойство Encoding
XmlWriterSettings
игнорируется при создании XmlWriter
с TextWriter
в любом случае.)
Если вы действительно хотите UTF-16, то при создании StreamWriter
укажите там также Encoding.Unicode
.