繁体   English   中英

二进制作家在写作中插入了额外的字符

[英]Binary writer inserts extra character in writing

嗨,我正在尝试将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">

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

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

相反,只使用:

File.WriteAllText(path, strCXML2);

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

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

并有帮助地链接到有关编写文本文件的单独部分

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM