Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#从二进制文件读取时无法识别的字符_C# - Fatal编程技术网

C#从二进制文件读取时无法识别的字符

C#从二进制文件读取时无法识别的字符,c#,C#,我有一些人的信息被分成两部分,一部分是二进制文件的内容,另一部分是.txt文件中的文本条目。我正在尝试制作一个应用程序,将这些信息打包成一个文本文件(文本文件,因为我有理由希望这个文件也是人类可读的),并能够稍后通过创建新的二进制文件和文本条目将该文件解包回来 到目前为止,我遇到的第一个问题是:在将二进制文件转换为字符串时(或者更早,在读取字节时),一些信息丢失了,我不确定文件的格式是否奇怪,或者我做错了什么。有些字符显示为问号 用问号替换的字符示例: ýÿÿ 这是从二进制文件中读取信息并将其

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

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

用问号替换的字符示例:

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


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

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

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

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

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


如果编码和解码都在控制之下,请使用能够完成整个往返过程的
编码
,如UTF8或Unicode。如果您自己没有对字符串进行编码,请使用正确的
编码

你确定它们是ascii字符吗?您是否尝试过使用unicode编码而不是ascii编码?你确定它是二进制文件中的文本数据吗?任意二进制数据不是文本,因此不要试图将其显示为文本。根据你的问题和代码,我怀疑你还不知道正确使用文本所需的绝对最小知识量。从这里开始阅读:正如Joel明智地说的,在理解这一点之前,停止编写代码。您将二进制文件转换为binaryFileText变量中的文本,然后在messagebox.show调用中,尝试将二进制文件解析为ascii。为什么有两种不同的方法来处理二进制文件?创建文本文件时,您实际使用的是哪一个?@Eric Lippert谢谢,我将阅读该链接。但我想答案可能是,出于某种原因,将二进制数据存储为文本格式是绝对不可能的?或者这种特定类型的文件有一些特别棘手的问题?谢谢,我会考虑的。起初,应用程序生成的二进制文件(以及连接的txt文件)使用utf8编码,所以我将其更改为ansi,但这对问号没有帮助。我想将存储的字符串转换为二进制文件的部分,它生成了一个ansi编码的文件,但有些字符带有问号:byte[]binaryFileBytes=Convert.FromBase64String(binaryFileContent);byte[]binaryFileAnsi=Encoding.Convert(Encoding.UTF8,Encoding.GetEncoding(1252),binaryFileBytes);writealBytes(pathNewBinary、binaryFileAnsi、Encoding.Default);但我认为当你们用UTF8写的时候,问题开始得更早,为什么你们要用ANSI读呢?那不一样。
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