C#处理UTF8文本文件和学位字符

时间:2014-12-18 16:50:18

标签: c# text character-encoding

我正在使用以下代码

处理文本文件(VB6源文件)
Encoding currentEncoding;
            using (var reader = new System.IO.StreamReader(_sourceFile, true))
            {
                 currentEncoding = reader.CurrentEncoding;
            }

...

var fileasText = File.ReadAllLines(_sourceFile, currentEncoding);

我将每一行传递给一个函数,该函数执行(或者更确切地说,在这种情况下不执行)某个进程,该进程又返回一个字符串。我正在收集所有这些字符串,最后使用:

重写文本文件
   File.WriteAllLines(Path.GetDirectoryName(_sourceFile) + @"\" + SourceFilename, newLines.ToArray(), currentEncoding);

这很好用,但我丢失了一些特殊字符,例如度数字符。我在阅读和编写文件时尝试了各种编码,但学位字符仍然搞砸了。这是我正在重写的实际源代码,所以让文件完美是非常必要的。

我正在读取文本文件的当前编码(返回UTF8)并使用它来编码保存的文件,那么我为什么要弄乱角色呢?我不是在改变编码方法。

感谢您的帮助

P.S。需要明确的是,包含损坏字符的行不会被函数更改。该函数只是查看它并返回false表示它不需要特殊处理。然后将该行添加到字符串数组中并处理下一行。

1 个答案:

答案 0 :(得分:1)

您必须设置编码。 StreamReader默认为UTF8,显然不是您文件的实际内容。

我的猜测是你的文件实际上是Unicode ...虽然它肯定是一个不同的编码。当您拥有文本文件时,了解您的编码是至关重要的,这样您就可以保证正确阅读它们。

// Reading
var fileasText = File.ReadAllLines(_sourceFile, Encoding.Unicode);

// Writing
File.WriteAllLines(Path.GetDirectoryName(_sourceFile) + @"\" + SourceFilename, 
     newLines.ToArray(), Encoding.Unicode);