将二进制文件转换为文本

时间:2013-12-06 11:02:36

标签: 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.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时,它是一个二进制文件,我如何获取文本文件。

4 个答案:

答案 0 :(得分:1)

你得到的回应是什么格式? 没有文本文件这样的东西。只有二进制文件。 HTTP也是100%二进制。

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

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

  1. 您可以使用十六进制编辑器猜测格式
  2. 您可以询问网站所有者

答案 1 :(得分:0)

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

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

   using (HttpWebResponse response = req.GetResponse() as HttpWebResponse)   
    {  
      StreamReader reader = new StreamReader(response.GetResponseStream());
      string ResponseTXT = reader.ReadToEnd();
    }

然后你可以用常规技术保存它 http://msdn.microsoft.com/en-us/library/6ka1wd3w%28v=vs.110%29.aspx

你的意思是?

答案 2 :(得分:0)

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

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

type <file.ext>

要在其他代码页中查看:

chcp <codepage>
type <file.ext>

要查看文件的(纯文本)表示形式,请先对其进行编码(例如,将其转换为文本文件)。通过一些十六进制编辑器进行十六进制编码的字符串。 十六进制序列的前几个字符应为magic number,表示正在读取的文件类型。然后,您将使用关联的程序(能够打开这些类型的文件)打开文件。

如果 您所期望的文本文件,而得到的文件不仅仅是可打印(纯文本)字符,则很可能是对其进行了某种压缩/加密。再次,魔术数字应提示如何处理文件,例如。在尝试读取数据/文件之前先解压缩。 (加密文件应带有解密提示/密钥,除非较早交换/同意)

答案 3 :(得分:-1)

使用本主题Creating a byte array from a stream

中的ReadFully方法

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

string text = System.Text.Encoding.Default.GetString(byteArray);

最后创建文本文件并编写内容:

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