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

Zes*_*sty 2 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);
            }
        }
Run Code Online (Sandbox Code Playgroud)

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

〜有些文字

〜更多文字

我做错了什么/忘记了什么?

谢谢你的帮助.

Jon*_*eet 7

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

我建议你只修复一个编码(例如Encoding.Unicode或者Encoding.UTF8)并以这种方式编写文本.

至于为什么BinaryWriter.Write(text)在每行的开始是把"特殊字符",你检查的文档为它做什么?

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

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

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

  • @HappyCoder4U:文本没有“原始”的等价物。文本和二进制是根本不同的。这就像要求英语中“cat”这个词的“原始”形式,而不涉及任何特定语言。单词由语言定义,就像文本的二进制形式由编码定义一样。如果您不知道其他系统将如何读取您的文件,那么您将完全陷入困境。你绝对*必须*知道这一点。 (2认同)