C# 将二进制文件转换为文本

C# 将二进制文件转换为文本,c#,httpwebresponse,C#,Httpwebresponse,我有一个程序,可以从二进制格式的url获取响应,但我不知道如何将其转换为文本文件 byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(postString); request.ContentLength = postBytes.Length; Stream stream = request.GetRequestStream(); stream.Write(postBytes, 0, postBytes.Length); stream.Clo

我有一个程序,可以从二进制格式的url获取响应,但我不知道如何将其转换为文本文件

byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(postString);
request.ContentLength = postBytes.Length;
Stream stream = request.GetRequestStream();
stream.Write(postBytes, 0, postBytes.Length);
stream.Close();

response = (HttpWebResponse)request.GetResponse();
Stream ReceiveStream = response.GetResponseStream();
string filename = "C:\\responseGot.txt";

byte[] buffer = new byte[1024];
FileStream outFile = new FileStream(filename, FileMode.Create);
int bytesRead;
while ((bytesRead = ReceiveStream.Read(buffer, 0, buffer.Length)) != 0) 
    outFile.Write(buffer, 0, bytesRead);

当我打开responseGot.txt时,它是一个二进制文件,如何获取文本文件

在本主题中使用
方法

获取实际字符串的字符串表示形式:

string text = System.Text.Encoding.Default.GetString(byteArray);
最后创建文本文件并写入内容:

using(StreamWriter sw = new StreamWriter("C:\\responseGot.txt"))
{
        sw.WriteLine(text);
}

在本主题中,请轻松使用
方法

获取实际字符串的字符串表示形式:

string text = System.Text.Encoding.Default.GetString(byteArray);
最后创建文本文件并写入内容:

using(StreamWriter sw = new StreamWriter("C:\\responseGot.txt"))
{
        sw.WriteLine(text);
}

您不会在代码示例中显示将文件保存到任何位置

但要将响应转换为字符串,可以使用:

   using (HttpWebResponse response = req.GetResponse() as HttpWebResponse)   
    {  
      StreamReader reader = new StreamReader(response.GetResponseStream());
      string ResponseTXT = reader.ReadToEnd();
    }
然后你可以用常用的方法保存它


您的意思是吗?

您的代码示例中没有显示在任何地方保存文件

但要将响应转换为字符串,可以使用:

   using (HttpWebResponse response = req.GetResponse() as HttpWebResponse)   
    {  
      StreamReader reader = new StreamReader(response.GetResponseStream());
      string ResponseTXT = reader.ReadToEnd();
    }
然后你可以用常用的方法保存它


你是这个意思吗?

你得到的答复是什么格式的没有文本文件。只有二进制文件。HTTP也是100%二进制的

文本是字节的解释,它仅作为运行应用程序的一部分存在。你永远不能,永远不能把文本写入文件。您只能将文本转换为字节(使用各种方式)并写入字节

因此,问问自己,为什么notepad.exe无法将收到的字节解释为文本。也许响应不是直接的文本,而是一个ZIP文件或其他东西

  • 您可以使用十六进制编辑器猜测格式
  • 你可以问网站所有者

  • 你得到的答复是什么形式的没有文本文件。只有二进制文件。HTTP也是100%二进制的

    文本是字节的解释,它仅作为运行应用程序的一部分存在。你永远不能,永远不能把文本写入文件。您只能将文本转换为字节(使用各种方式)并写入字节

    因此,问问自己,为什么notepad.exe无法将收到的字节解释为文本。也许响应不是直接的文本,而是一个ZIP文件或其他东西

  • 您可以使用十六进制编辑器猜测格式
  • 你可以问网站所有者

  • 现在数字计算中表示的每个数据都基于2位,即二进制(电/磁信号:开/关或北/南)。 写入磁盘的每个文件也是一个二进制文件,即(8位)字节序列。 ASCII/ANSI为每个字节序列定义字符映射,256个字节中只有大约95个被称为可打印(文本)字符

    您下载的文件似乎不仅仅包含可打印字符(通常称为纯文本文件)。 要按原样查看文件(在当前编码设置中):

    类型
    
    要在其他代码页中查看,请执行以下操作:

    chcp <codepage>
    type <file.ext>
    
    chcp
    类型
    
    要查看文件的(纯)文本表示形式,您需要首先对其进行编码(即将其转换为文本文件),例如通过某个十六进制编辑器对十六进制编码字符串进行编码。 十六进制序列的前几个字符应给出一个数字,表示正在读取的文件类型。然后用相关程序打开文件(能够打开这些类型的文件)


    如果它是您期望的文本文件,而得到的文件不仅仅是可打印(纯文本)字符,那么更有可能对其应用了某种压缩/加密。同样,神奇的数字应该提示如何处理文件,例如,在尝试读取数据/文件之前解压缩。(加密文件应带有解密提示/密钥,除非事先交换/同意)

    现在数字计算中表示的每个数据都基于2位,即二进制(电/磁信号:开/关或北/南)。 写入磁盘的每个文件也是一个二进制文件,即(8位)字节序列。 ASCII/ANSI为每个字节序列定义字符映射,256个字节中只有大约95个被称为可打印(文本)字符

    您下载的文件似乎不仅仅包含可打印字符(通常称为纯文本文件)。 要按原样查看文件(在当前编码设置中):

    类型
    
    要在其他代码页中查看,请执行以下操作:

    chcp <codepage>
    type <file.ext>
    
    chcp
    类型
    
    要查看文件的(纯)文本表示形式,您需要首先对其进行编码(即将其转换为文本文件),例如通过某个十六进制编辑器对十六进制编码字符串进行编码。 十六进制序列的前几个字符应给出一个数字,表示正在读取的文件类型。然后用相关程序打开文件(能够打开这些类型的文件)


    如果它是您期望的文本文件,而得到的文件不仅仅是可打印(纯文本)字符,那么更有可能对其应用了某种压缩/加密。同样,神奇的数字应该提示如何处理文件,例如,在尝试读取数据/文件之前解压缩。(加密文件应附带解密提示/密钥,除非事先交换/同意)

    您不显示如何编写文件,但您必须知道二进制文件的格式,以便将其转换为文本。如果是UTF-8,请尝试
    Encoding.UTF8.GetString()
    。@CodeCaster,我就是这样写的。字节[]缓冲区=新字节[1024];FileStream outFile=新FileStream(文件名,FileMode.Create);int字节读取;而((bytesRead=ReceiveStream.Read(buffer,0,buffer.Length))!=0)outFile.Write(buffer,0,bytesRead);这回答了我一半的评论。你确定字节应该代表文本吗?然后在相应的编码类上调用
    GetString()
    。您不会显示如何编写文件,但必须知道二进制文件的格式,才能将其转换为文本。尝试
    Encoding.UTF8.GetStr