如何将一些文本写为字节(无编码)

时间:2010-11-08 08:08:33

标签: c# binary

我需要生成一个将被另一个系统读取的文件。出于这个原因,它应该是二进制的,而不是带有某种编码的文本。

这是我正在使用的代码:

        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);
            }
        }

当我打开文件并查看它时,我可以在每行的开头看到一些特殊字符,类似于此(很难在此处粘贴,因为它不显示相同):

〜一些文字

〜更多文字

我做错了什么/遗忘?

感谢您的帮助。

1 个答案:

答案 0 :(得分:7)

没有编码就没有文本这样的概念。这就像是想要将抽象图像保存到磁盘而不指定任何图像格式。 (甚至“原始”是一种图像编码 - 你需要就某种方式传达宽度,高度,字节顺序,颜色深度的方式达成一致。)

我建议您只修改一个编码(例如Encoding.UnicodeEncoding.UTF8)并以此方式编写文本。

至于为什么BinaryWriter.Write(text)在每一行的开头添加“特殊字符”,你是否检查了documentation它的作用?

  

在BinaryWriter的当前编码中将长度为前缀的字符串写入此流,并根据使用的编码和写入流的特定字符推进流的当前位置。

  

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

所以你看到的是长度前缀......但它会使用你为BinaryWriter设置的任何编码。