我尝试读取xml文件并使用xml执行某些操作。但是我将文件加载到XmlDocument时遇到问题。这不是错误。但是当加载,程序崩溃和编译器说:
没有Unicode字节顺序标记。无法切换到Unicode。
这是我的代码:
Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
dlg.Filter = "xml (*.xml)|*.xml";
if (dlg.ShowDialog() == true){
XmlDocument doc = new XmlDocument();
doc.Load(dlg.FileName);
答案 0 :(得分:1)
该文件不是unicode如果您不确定编码是否可以执行以下操作:
// path + filename !!
using (StreamReader streamReader = new StreamReader(dlg.FileName, true))
{
XDocument xdoc = XDocument.Load(streamReader);
}
或者那样做:
XDocument xdoc = XDocument.Parse(System.IO.File.ReadAllLines(dlg.FileName));
仔细阅读链接以了解问题。 @ZachBurlingame解决方案;你必须这样做:
Why does C# XmlDocument.LoadXml(string) fail when an XML header is included?
// Encode the XML string in a UTF-8 byte array
byte[] encodedString = Encoding.UTF8.GetBytes(xml);
// Put the byte array into a stream and rewind it to the beginning
MemoryStream ms = new MemoryStream(encodedString);
ms.Flush();
ms.Position = 0;
// Build the XmlDocument from the MemorySteam of UTF-8 encoded bytes
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(ms);
它必须有效!