Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 保留文本文件编码(ASCII、UTF-8、UTF-16)_.net - Fatal编程技术网

.net 保留文本文件编码(ASCII、UTF-8、UTF-16)

.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

我有一个用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 of reader打开StreamWriter

我的问题是一些UTF-16文件缺少前导,并且在StreamReader打开后,它将CurrentEncoding设置为UTF-8,这导致写入程序以UTF-8模式打开。调试时,我可以看到读卡器在第一次调用ReadLine后将其CurrentEncoding属性更改为UTF-16,但此时编写器已经打开


我可以想出一些解决办法(稍后打开编写器或检查源文件两次——第一次只是为了检测编码),但我认为我应该先征求专家的意见。请注意,我不关心ASCII文件的代码页,我只关心ASCII/UTF-8/UTF-16编码。

在打开编写器之前,我会尝试做一个
reader.Peek()
,我认为这对您来说应该足够了