我正在尝试使用utf-8编码我的xml文本,代码如下。出于某种原因,我得到utf-16而不是utf-8。有什么理由可以吗?
StringWriter writer = new StringWriter();
xdoc.Save(writer);
writer.Flush();
string xml = writer.ToString();
byte[] bytes = Encoding.UTF8.GetBytes(xml);
System.IO.File.WriteAllBytes(pathDesktop + "\\22CRE002.XPO", bytes);
答案 0 :(得分:0)
StringWriter
本身“通过TextWriter.Encoding
属性”广告UTF-16的编码,因此XmlWriter
检测到并相应地修改XML声明。您实际上是以UTF-8的形式写出数据 - 只是XML文件本身会声称(错误地)它是UTF-16,导致各种错误。
您的选择是:
StringWriter
的子类,通过覆盖Encoding
属性StringWriter
并直接写入文件。就个人而言,我会选择第二种选择:
using (var writer = XmlWriter.Create(Path.Combine(pathDesktop, "22CRE002.XPO"))
{
xdoc.Save(writer);
}
为什么首先将它全部缓存在内存中?请注意,如果您未指定编码,XmlWriter
将默认为UTF-8。