我编写了一个小程序来遍历大量文件并在找到特定字符串匹配的地方应用一些更改,我遇到的问题是不同的文件具有不同的编码。所以我想做的是检查编码,然后以原始编码覆盖文件。
在 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 就此主题发表了一篇精彩的博文,值得一读
文章的主旨是
- 如果 BOM(字节顺序标记)存在,那么你就成功了
- 否则就是猜测和启发式
但是我仍然认为最好的方法是您链接的问题中提到的 Darin。让 StreamReader
为您猜测与重新发明轮子。它只需要对您的 sample 进行非常轻微的修改。
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);
}
关于C# - 检测文件中的编码,使用找到的编码将更改写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4385707/