C# WriteNode(XmlReader)使用内存流写入无效的XML

C# WriteNode(XmlReader)使用内存流写入无效的XML,c#,encoding,xmlreader,xmlwriter,C#,Encoding,Xmlreader,Xmlwriter,我需要将XML流规范化为UTF-16。我使用以下方法: 传递的所有流都是字节流:MemoryStream或FileStream。我的问题是,当我将包含以下(正确编码的)XML的文件流作为jobTicket传入时: <?xml version="1.0" encoding="utf-8"?> <workflow> <file> <request name="create-temp-file" tag="очень"&

我需要将XML流规范化为UTF-16。我使用以下方法:

传递的所有流都是字节流:MemoryStream或FileStream。我的问题是,当我将包含以下(正确编码的)XML的文件流作为jobTicket传入时:

   <?xml version="1.0" encoding="utf-8"?>
   <workflow>
      <file>
        <request name="create-temp-file" tag="очень">
        </request>
        <request name="create-temp-folder" tag="非常に">
        </request>
      </file>
   </workflow>

我错过了什么?xmlWtr不应该编写正确的xml声明吗?我必须寻找一个声明并替换它吗?

您应该从读取流中删除xml声明,因为它会复制它而不做任何更改。Xml编写器将为您编写正确的:

using (XmlWriter xmlWtr = XmlWriter.Create(ticketStreamU16, settings))
{
    xmlRdr.MoveToContent();
    xmlWtr.WriteNode(xmlRdr, false);
}

不,你必须自己做。
using (XmlWriter xmlWtr = XmlWriter.Create(ticketStreamU16, settings))
{
    xmlRdr.MoveToContent();
    xmlWtr.WriteNode(xmlRdr, false);
}