下载一个用C#分隔的简单文件会产生垃圾字符

下载一个用C#分隔的简单文件会产生垃圾字符,c#,encoding,download,filestream,streamwriter,C#,Encoding,Download,Filestream,Streamwriter,当试图用C#启动固定宽度文件的下载并用记事本打开下载的文件时,内容完全是胡言乱语。请参见下面的示例 目前,人们将将将将将将将的的“视频视频”的离散离散离散离散离散的的??????????????????????????????的的??????????????????????????的的??????????????????的的???????????????????????????????????????????????????????????????????????????????????????

当试图用C#启动固定宽度文件的下载并用记事本打开下载的文件时,内容完全是胡言乱语。请参见下面的示例

目前,人们将将将将将将将的的“视频视频”的离散离散离散离散离散的的??????????????????????????????的的??????????????????????????的的??????????????????的的??????????????????????????????????????????????????????????????????????????????????????????????的的的????????????????????????的的除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了"好","好","好","好","好","好","好","好","好","好","好","好"

这是我用来执行下载的代码

char[] buffer = new char[2048];
using (var reader = new StreamReader(responseStream))
{
    using (var tw = new StreamWriter(DESTINATION + subFolder + files[files.Count - 1] + ".txt", false, Encoding.ASCII))
    {
        while (true)
        {
            int readCount = reader.Read(buffer, 0, buffer.Length);
            if (readCount == 0) break;
            tw.Write(buffer, 0, readCount);
        }
        responseStream.Close();
        tw.Close();
    }
}
我倾向于说它与文件编码有关

我已经用python编写了相同的下载程序,文件下载与代码预期的一样。我就是不能用C来解释

使现代化 下载的文本仍然是垃圾,但如果我使用Microsoft Excel从文本导入数据,并将文件源设置为20924:IBM Latin-1,则文本是可读的。在制作文件的下载过程中,是否有某种方法可以通过编程实现这一点

使现代化 任何IBM文件源类型都会对下载的数据进行解码。

请尝试以下操作:

StreamReader reader = new StreamReader(inputFilePath, Encoding.GetEncoding("IBM00924"));
using (reader = File.OpenText(inputFilePath))
{ ... }
如果您想尝试所有可用的编码以查看产生可读数据的内容,请使用该方法对所有编码进行迭代,如下所示:

foreach (var encoding in Encoding.GetEncodings())
{
    // Read raw
    var bytes = File.ReadAllBytes(inputFilePath);
    var converted = Encoding.Convert(encoding, Encoding.Utf8, bytes);
    File.WriteAllText(Path.Combine(Path.GetDirectoryName(outputFilePath), encoding.Name + ".txt") converted);
}

希望这有帮助

文件的编码是什么,您传入
encoding.ASCII
应该是什么?@ScottChamberlain我几乎100%确定它应该是ASCII。但是在
Encoding.ASCII
中,它会返回乱码。在我的python版本中,我没有指定任何内容,结果很好。这就是为什么我挠头的原因。我发现Python不太可能默认为ASCII,现在几乎没有任何东西能做到这一点。一切都是Utf-8、Utf-16(在.net中称为
Encoding.Unicode
)或Utf-32。@ScottChamberlain我已经尝试过所有这些编码方案,每个方案都会产生垃圾,而python下载不会。当我使用FileZilla这样的客户端手动下载文件时,它也会生成一个可读的文档?只是想知道为什么写你自己的下载方法而不是使用.NET中现有的许多下载方法中的一种。用记事本打开时仍会乱说。可能在
FileStream()
上设置编码?我同意。但这是敏感数据。此外,它还增加了挑战。是否有一种方法可以读取每个
编码中的响应流。GetEncodings()
并将它们写入各自的编码文件?这很有帮助。通过迭代所有不同的编码,我找到了一个有效的编码,我在所有下载中都使用了它。