您好我正在尝试将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">
为什么会这样做?
答案 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)
。