我需要将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>
ticketStreamU16包含一个XML声明,UTF-8编码声明为UTF-16。这不是格式良好的XML。
public void EncodeJobTicket(Stream jobTicket, Stream ticketStreamU16)
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.Unicode;
if (jobTicket.CanSeek)
{
jobTicket.Position = 0;
}
using (XmlReader xmlRdr = XmlReader.Create(jobTicket))
using (XmlWriter xmlWtr = XmlWriter.Create(ticketStreamU16, settings))
{
xmlWtr.WriteNode(xmlRdr, false);
}
}
我错过了什么? xmlWtr不应该写正确的xml声明吗?我是否需要寻找声明并替换它?
答案 0 :(得分:0)
您应该从读取流中删除xml声明,因为它会在不更改的情况下复制它。 Xml编写器将为您编写正确的编写器:
using (XmlWriter xmlWtr = XmlWriter.Create(ticketStreamU16, settings))
{
xmlRdr.MoveToContent();
xmlWtr.WriteNode(xmlRdr, false);
}