二进制编写器以书面形式插入额外字符

时间:2012-10-15 05:37:49

标签: c# .net xml

您好我正在尝试将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">

为什么会这样做?

2 个答案:

答案 0 :(得分:5)

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

相反,只使用:

File.WriteAllText(path, strCXML2);

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

  

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

并且有用地链接到关于writing text files

的单独部分

答案 1 :(得分:0)

如果要使用BinaryWriter,首先要用ASCII或Unicode UTF-16对其进行编码。您的XML应指定它使用的编码,使用Binary Writer的特定编码。

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

那应该删除前两个垃圾字符。 我建议使用WriteAllText()方法。

如果您需要在Binarywriter的特定区域内书写,请使用textfile(offset)