如何在TextWriter对象中更改编码?

我有一个xml,我通过API在另一个resurse发送。 我是通过XDocument创建的:

XDocument xDoc = new XDocument( new XDeclaration("1.0", "utf-8", "yes"), new XElement("Entity",new XAttribute("Type", "attribute1"), new XElement("Fields",... 

当我把它放在它没有声明的请求中。 所以我接下来做:

 StringBuilder builder = new StringBuilder(); TextWriter writer = new StringWriter(builder); using (writer) { xDoc.Save(writer); } 

但现在TextWriter将xml中的编码更改为utf-16。 我需要在utf-8上再次更改它。

这看起来很奇怪,但是如果要在xml中输出到utf-8编码的string ,看起来你必须StringWriter

 public class Program { public static void Main(string[] args) { XDocument xDoc = new XDocument( new XDeclaration("1.0", "utf-8", "yes"), new XElement("Entity",new XAttribute("Type", "attribute1"))); StringBuilder builder = new StringBuilder(); using (TextWriter writer = new EncodingStringWriter(builder, Encoding.UTF8)) { xDoc.Save(writer); } Console.WriteLine(builder.ToString()); } } public class EncodingStringWriter : StringWriter { private readonly Encoding _encoding; public EncodingStringWriter(StringBuilder builder, Encoding encoding) : base(builder) { _encoding = encoding; } public override Encoding Encoding { get { return _encoding; } } } 

尝试

 TextWriter ws = new StreamWriter(path, true, Encoding.UTF8); 

要么

 TextWriter ws = new StreamWriter(stream, Encoding.UTF8);