从二进制文件

时间:2017-03-12 17:35:13

标签: c#

我有一些项目的信息被分成两部分,一部分是二进制文件的内容,另一部分是.txt文件中的文本输入。我正在尝试制作一个将这些信息打包成一个文本文件的应用程序(文本文件,因为我有理由希望这个文件也是人类可读的),以后能够通过创建新的二进制文件来解压缩该文件文字输入。

到目前为止我遇到的第一个问题:在将二进制文件转换为字符串时(或者在读取字节期间可能更早),有些信息会丢失,而且我不确定该文件是否是奇怪的格式或者我&# 39;做错了什么。一些字符显示为问号。

用问号代替的字符示例:

ýÿÿ

这是从二进制文件中读取信息并将其编码为字符串的部分(我打算将其存储在文本文件中)。

byte[] binaryFile = File.ReadAllBytes(pathBinary);

// I also tried this for some reason: byte[] binaryFile = Encoding.ASCII.GetBytes(File.ReadAllText(pathBinary));

string binaryFileText = Convert.ToBase64String(binaryFile); //this is the coded string that goes into joined file to hold binary file information, when decoded the result shows question marks instead of some characters

                    MessageBox.Show("binary file text: " + Encoding.ASCII.GetString(binaryFile), "debug", MessageBoxButtons.OK, MessageBoxIcon.Information); //this also shows question marks

我希望在应用程序的第二个功能(解压缩回文本和二进制文件)的过程中还有一些注意事项,但到目前为止,我的主要问题是在读取二进制文件或将其转换为字符串时无法识别的字符,这使得此数据无法用于存储为文本以便再现文件。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

没有二进制字符串数据到字符串的通用转换。字符串是一系列unicode字符,因此可以保存unicode范围的任何字符。

二进制数据是一系列字节,因此可以是从视频到各种格式的字符串。

由于存在多个二进制字符串表示,因此需要Encoding将一个转换为另一个。您选择的编码必须与二进制字符串格式匹配。如果不是,你会得到错误的结果。

您正在使用ASCII编码进行转换,这显然是不正确的。 ASCII无法编码完整的unicode范围。这意味着即使您将其用于编码,解码的结果也不会始终与原始文本匹配。

如果您同时控制编码和解码,请使用可以执行完整往返的Encoding,例如UTF8或Unicode。如果您不自己编码字符串,请使用正确的Encoding