使用 C# 下载一个简单的 space 分隔文件会产生乱码
Downloading a simple space delimited file with C# yields garbage characters
当尝试在 C# 中启动固定宽度文件的下载并使用记事本打开下载的文件时,内容完全是乱码。请参阅下面的示例。
????????\@@@@@@@@@@@@@@@@@@@@@@@@???????????????????@?????????@????????????@@???????@???????????????????@@@@@@@@@@@??@@@@??@?????????????@@@@@@@@@@@@@@@@?????@@@@@@@@@@@@@@??@@???????@??????????k?????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?????????????????????
这是我用来执行下载的代码。
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 导入数据 From Text 并将文件来源设置为 20924: IBM Latin-1 文本可读。在制作文件的下载过程中,是否有某种方式以编程方式执行此操作?
更新
任何 IBM 文件来源类型都会解码下载的数据。
试试这个:
StreamReader reader = new StreamReader(inputFilePath, Encoding.GetEncoding("IBM00924"));
using (reader = File.OpenText(inputFilePath))
{ ... }
如果您想尝试所有可用的编码以查看产生可读数据的方式,请使用 Encoding.GetEncodings() 方法遍历所有编码,如下所示:
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);
}
希望对您有所帮助!
当尝试在 C# 中启动固定宽度文件的下载并使用记事本打开下载的文件时,内容完全是乱码。请参阅下面的示例。
????????\@@@@@@@@@@@@@@@@@@@@@@@@???????????????????@?????????@????????????@@???????@???????????????????@@@@@@@@@@@??@@@@??@?????????????@@@@@@@@@@@@@@@@?????@@@@@@@@@@@@@@??@@???????@??????????k?????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?????????????????????
这是我用来执行下载的代码。
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 导入数据 From Text 并将文件来源设置为 20924: IBM Latin-1 文本可读。在制作文件的下载过程中,是否有某种方式以编程方式执行此操作?
更新
任何 IBM 文件来源类型都会解码下载的数据。
试试这个:
StreamReader reader = new StreamReader(inputFilePath, Encoding.GetEncoding("IBM00924"));
using (reader = File.OpenText(inputFilePath))
{ ... }
如果您想尝试所有可用的编码以查看产生可读数据的方式,请使用 Encoding.GetEncodings() 方法遍历所有编码,如下所示:
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);
}
希望对您有所帮助!