我编写了一个小程序,用于遍历许多文件并在发现某个字符串匹配项的地方进行一些更改,但我遇到的问题是不同的文件具有不同的编码。所以我想做的是检查编码,然后以其原始编码覆盖文件。
在C#.net 2.0中最漂亮的方法是什么?
到目前为止,我的代码看起来非常简单;
String f1 = File.ReadAllText(fileList[i]).ToLower();
if (f1.Contains(oPath))
{
f1 = f1.Replace(oPath, nPath);
File.WriteAllText(fileList[i], f1, Encoding.Unicode);
}
我看了一下Auto encoding detect in C#,这使我意识到如何检测编码,但是我不确定如何使用该信息以相同的编码进行编写。
将不胜感激在这里的任何帮助。
最佳答案
不幸的是,编码是始终没有确定答案的主题之一。在许多情况下,与检测编码相比,更容易猜测编码。雷蒙德·陈(Raymond Chen)在这个主题上写了一篇很棒的博客文章,值得一读
文章的要旨是
但是我仍然认为最好的方法是在您所链接的问题中提到的达林。让
StreamReader
为您猜测与重新发明轮子有关。它只需要对您的样本进行很小的修改。String f1;
Encoding encoding;
using (var reader = new StreamReader(fileList[i])) {
f1 = reader.ReadToEnd().ToLower();
encoding = reader.CurrentEncoding;
}
if (f1.Contains(oPath))
{
f1 = f1.Replace(oPath, nPath);
File.WriteAllText(fileList[i], f1, encoding);
}