我需要生成一个将被另一个系统读取的文件。出于这个原因,它应该是二进制的,而不是带有某种编码的文本。
这是我正在使用的代码:
using (FileStream stream = new FileStream(fileName, FileMode.Create))
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
writer.Write("Some text" + Environment.NewLine);
writer.Write("Some more text" + Environment.NewLine);
}
}
当我打开文件并查看它时,我可以在每行的开头看到一些特殊字符,类似于此(很难在此处粘贴,因为它不显示相同):
〜一些文字
〜更多文字
我做错了什么/遗忘?
感谢您的帮助。
答案 0 :(得分:7)
没有编码就没有文本这样的概念。这就像是想要将抽象图像保存到磁盘而不指定任何图像格式。 (甚至“原始”是一种图像编码 - 你需要就某种方式传达宽度,高度,字节顺序,颜色深度的方式达成一致。)
我建议您只修改一个编码(例如Encoding.Unicode
或Encoding.UTF8
)并以此方式编写文本。
至于为什么BinaryWriter.Write(text)
在每一行的开头添加“特殊字符”,你是否检查了documentation它的作用?
在BinaryWriter的当前编码中将长度为前缀的字符串写入此流,并根据使用的编码和写入流的特定字符推进流的当前位置。
和
以长度为前缀的字符串表示字符串长度,方法是在字符串前面加上包含该字符串长度的单个字节或单词。此方法首先将字符串的长度写为UTF-7编码的无符号整数,然后使用BinaryWriter实例的当前编码将该多个字符写入流中。
所以你看到的是长度前缀......但它会使用你为BinaryWriter
设置的任何编码。