保留文本文件编码(ASCII,UTF-8,UTF-16)

时间:2010-02-19 10:32:57

标签: .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 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编码。

1 个答案:

答案 0 :(得分:4)

我打算在打开作家之前做一个reader.Peek() - 我认为这应该足够了。