我有一个用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 encoding as reader
{
string line;
while ((line = reader.ReadLine()) != null)
{
// do something with line
writer.WriteLine(line);
}
}
它操作的大多数文件都是ASCII文件,偶尔会有UTF-16。我想保留文件编码,新创建的文件应该与正在读取的文件具有相同的编码 - 这就是我使用读者的CurrentEncoding打开StreamWriter的原因。
我的问题是一些UTF-16文件缺少前导码,并且在StreamReader打开后,它将CurrentEncoding设置为UTF-8,这导致编写器以UTF-8模式打开。调试时,我可以看到读者在第一次调用ReadLine后将其CurrentEncoding属性更改为UTF-16,但此时编写器已经打开。
我可以想到一些解决方法(稍后打开编写器或两次查看源文件 - 第一个只是检测编码),但我想先请专家提出意见。请注意,我不关心ASCII文件的代码页,我只关心ASCII / UTF-8 / UTF-16编码。
答案 0 :(得分:4)
我打算在打开作家之前做一个reader.Peek()
- 我认为这应该足够了。