.net 保留文本文件编码(ASCII、UTF-8、UTF-16)
我有一个用C#编写的简单文本文件处理工具,其框架如下所示:.net 保留文本文件编码(ASCII、UTF-8、UTF-16),.net,.net,我有一个用C#编写的简单文本文件处理工具,其框架如下所示: using (StreamReader reader = new StreamReader(absFileName, true)) // auto detect encoding using (StreamWriter writer = new StreamWriter(tmpFileName, false, reader.CurrentEncoding)) // open writer with the same en
using (StreamReader reader = new StreamReader(absFileName, true)) // auto detect encoding
using (StreamWriter writer = new StreamWriter(tmpFileName, false, reader.CurrentEncoding)) // open writer with the same encoding as reader
{
string line;
while ((line = reader.ReadLine()) != null)
{
// do something with line
writer.WriteLine(line);
}
}
它操作的大多数文件都是ASCII文件,偶尔还会出现UTF-16。我想保留文件编码,新创建的文件应该与正在读取的文件具有相同的编码-这就是为什么我使用CurrentEncoding of reader打开StreamWriter
我的问题是一些UTF-16文件缺少前导,并且在StreamReader打开后,它将CurrentEncoding设置为UTF-8,这导致写入程序以UTF-8模式打开。调试时,我可以看到读卡器在第一次调用ReadLine后将其CurrentEncoding属性更改为UTF-16,但此时编写器已经打开
我可以想出一些解决办法(稍后打开编写器或检查源文件两次——第一次只是为了检测编码),但我认为我应该先征求专家的意见。请注意,我不关心ASCII文件的代码页,我只关心ASCII/UTF-8/UTF-16编码。在打开编写器之前,我会尝试做一个
reader.Peek()
,我认为这对您来说应该足够了