我编写了一个小程序,用于遍历许多文件并在发现某个字符串匹配项的地方进行一些更改,但我遇到的问题是不同的文件具有不同的编码。所以我想做的是检查编码,然后以其原始编码覆盖文件。

在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)在这个主题上写了一篇很棒的博客文章,值得一读

  • http://blogs.msdn.com/b/oldnewthing/archive/2007/04/17/2158334.aspx

  • 文章的要旨是
  • 如果存在BOM(字节顺序标记),那么您就是黄金
  • 否则,它是猜测工作和启发式方法

  • 但是我仍然认为最好的方法是在您所链接的问题中提到的达林。让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);
    }
    

    10-08 08:41
    查看更多