/// <summary>
/// 转换文本文件编码
/// </summary>
/// <param name="filePath">文本文件路径</param>
/// <param name="oldEncoding">旧的文本编码</param>
/// <param name="newEncoding">要转换成的编码</param>
public void changeFileCodeing(String filePath,Encoding oldEncoding, Encoding newEncoding)
{
FileStream fs = new FileStream(filePath, FileMode.Open);
StreamReader sr = new StreamReader(fs, oldEncoding);
FileStream fsw = new FileStream(filePath + ".temp", FileMode.OpenOrCreate);
BinaryWriter bw = new BinaryWriter(fsw, newEncoding);
Char[] buffer = new char[1024];
int i = sr.Read(buffer, 0, 1024);
while (i > 0)
{
//转换
Byte[] buf = newEncoding.GetBytes(buffer, 0, i);
bw.Write(buf);
i = sr.Read(buffer, 0, 1024);
}
sr.Close();
bw.Close();
fs.Close();
fsw.Close();
File.Delete(filePath);
File.Move(filePath + ".temp", filePath);
}
在网上找了一个获得文件编码的方法。方法是读取文件的前两个字节,判断是什么编码。但是如果根据上面的方法转换编码的话,识别文本编码的方法就会出错~ 这个代解决!
识别文本文件的方法
/// <summary>
/// 获得文本文件编码
/// </summary>
/// <param name="filePath">文本文件路径</param>
/// <returns></returns>
public Encoding getCodeString(String filePath)
{
FileStream fs = new FileStream(filePath, FileMode.Open, System.IO.FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
Byte[] buffer = br.ReadBytes(2);
br.Close();
fs.Close();
if (buffer[0] >= 0xEF)
{
if (buffer[0] == 0xEF && buffer[1] == 0xBB)
{
return System.Text.Encoding.UTF8;
}
else if (buffer[0] == 0xFE && buffer[1] == 0xFF)
{
return System.Text.Encoding.BigEndianUnicode;
}
else if (buffer[0] == 0xFF && buffer[1] == 0xFE)
{
return System.Text.Encoding.Unicode;
}
else
{
return System.Text.Encoding.Default;
}
}
else
{
return System.Text.Encoding.Default;
}
}
代码
未加任何异常检测。如果用的话请自行添加。