我拥有世界上最简单的代码,
using (XmlWriter writer = XmlWriter.Create(stringWriter))
{
writer.WriteStartDocument();
writer.WriteStartElement("Board");
writer.WriteAttributeString("Rows", mRows.ToString());
writer.WriteAttributeString("Columns", mColumns.ToString());
writer.WriteEndElement();
writer.WriteEndDocument();
}
TextWriter writer1 = new StreamWriter(path);
writer1.Write(stringWriter.toString());
writer1.Close();
然后我把它写成一个如下所示的txt文件:
<?xml version="1.0" encoding="utf-16"?>
<Board Rows="30" Columns="50">
</Board>
然后我执行以下操作:
FileStream str = new FileStream(s.FileName, FileMode.Open);
using(XmlReader reader = XmlReader.Create(stream))
{
reader.Read();
}
它引发了一个例外:
“没有Unicode字节顺序标记。无法切换到Unicode。”
我用Google搜索了异常并找到了几个解决方法,但我不明白为什么我需要一个解决方法,我只想阅读我写的xml。 有人可以解释一下究竟是什么问题? 我应该在xml中写一些不同的东西吗?
最简单的解决办法是什么?
答案 0 :(得分:2)
您可能没有写入File.WriteAllText
或香草FileStream
不能执行的unicode文件。
而是使用File.OpenWrite
或FileStream
与StreamWriter(Stream steam, Encoding encoding)
构造函数结合使用来指定unicode。
样品:
var path = @"C:\Dev\sample.xml";
string xml;
var mRows = 30;
var mColumns = 50;
var options = new XmlWriterSettings { Indent = true };
using (var stringWriter = new StringWriter())
{
using (var writer = XmlWriter.Create(stringWriter, options))
{
writer.WriteStartDocument();
writer.WriteStartElement("Board");
writer.WriteAttributeString("Rows", mRows.ToString());
writer.WriteAttributeString("Columns", mColumns.ToString());
writer.WriteEndElement();
writer.WriteEndDocument();
}
xml = stringWriter.ToString();
}
if(File.Exists(path))
File.Delete(path);
using(var stream = File.OpenWrite(path))
using(var writer = new StreamWriter(stream, Encoding.Unicode))
{
writer.Write(xml);
}
Console.Write(xml);
using(var stream = File.OpenRead(path))
using(var reader = XmlReader.Create(stream))
{
reader.Read();
}
File.Delete(path);