簡體   English   中英

為什么xmlreader無法讀取xmlwriter編寫的內容?

[英]Why xmlreader can't read something that xmlwriter wrote?

我擁有世界上最簡單的代碼,

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。”

我用谷歌搜索了異常,發現了幾種解決方法,但是我不明白為什么我需要解決方法,我只想閱讀我編寫的xml。 有人可以解釋一下到底是什么問題嗎? 我應該在xml中寫些不同的東西嗎?

最簡單的解決方案是什么?

您可能沒有寫入File.WriteAllText或普通FileStream不能執行的Unicode文件。

而是將File.OpenWriteFileStreamStreamWriter(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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM