我有一个程序从二进制格式的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时,它是一个二进制文件,我如何获取文本文件。
答案 0 :(得分:1)
你得到的回应是什么格式? 没有文本文件这样的东西。只有二进制文件。 HTTP也是100%二进制。
Text是字节的解释,它仅作为运行应用程序的一部分存在。您永远不会将文本写入文件。您只能将文本转换为字节(使用各种方式)并写入字节。
因此,请问自己,为什么你收到的字节不能被notepad.exe解释为文本。也许响应不是直接文本,而是ZIP文件或其他东西。
答案 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)
您下载的文件似乎不仅具有可打印的字符(通常称为纯文本文件)。 要按原样查看文件(使用当前的编码设置):
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);
}