1

您好我正在尝试将 xml 保存到文件中,并且它不断在文件开头添加不同的字符。

我的代码是

string strCXML2;

strCXML2 = "<input type=" + "\"" + "hidden" + "\"" + " name=" + "\"" + "cxml-urlencoded" + "\"" + " value=" + "\"";
strCXML2 = strCXML2 + "<!DOCTYPE cXML SYSTEM " + "\"" + "http://xml.cxml.org/schemas/cXML/1.2.023/cXML.dtd" + "\"" + ">";

//<snip>

BinaryWriter bw5 = new BinaryWriter(File.Open(Server.MapPath("~/data/test/test19.xml"), FileMode.OpenOrCreate))   
bw5.Write(strCXML2); 
bw5.Close();

每次它是其他一些垃圾字符时,都会在开始时返回以下 xml“}”中的文件

}<input type="hidden" name="cxml-urlencoded" value="<!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.023/cXML.dtd">

有什么想法为什么要这样做?

4

2 回答 2

8

它正在写入的字符是字符串的编码长度,因为:它不期望写入文本文件。BinaryWriter写...二进制。它以编码的二进制方式写入字符串,它可以用BinaryReader.ReadString.

相反,只使用:

File.WriteAllText(path, strCXML2);

BinaryWriter.Write(string)方法的文档解释了所有这些:

以长度为前缀的字符串通过在字符串前面加上一个包含该字符串长度的单个字节或单词来表示字符串长度。此方法首先将字符串的长度写入为 UTF-7 编码的无符号整数,然后使用 BinaryWriter 实例的当前编码将那么多字符写入流。

并且,有用的是,链接到有关编写文本文件的单独部分

于 2012-10-15T05:55:23.347 回答
1

如果您想使用BinaryWriter,您首先将其编码为 ASCII 或 Unicode UTF-16。您的 XML 应该指定它使用的编码,使用二进制写入器的特定编码。

byte[] textbyte = Encoding.Unicode.GetBytes(text);`

那应该删除前两个垃圾字符。我推荐这个WriteAllText()方法。

如果Binarywriter您需要在textfile(offset).

于 2017-05-18T00:14:18.017 回答