有时候我们要处理各种各样的编码,却经常遇到乱码的情况,这时我们要将文件保存为一种特定的编码,但是如果页面很多的时候就会非常头痛,那么有没有办法通常编程实现文件编码保存的批量处理呢?答案是肯定的。
首先我把对文件转换的代码帖出来
public void ConvertEncoding(string sourcePath, string destPath, Encoding destEncoding)
{
//Author: Truly 2006-3-31 2:24
Encoding srcEncoding = Encoding.Default;
FileStream fs = new FileStream(sourcePath, FileMode.Open);
byte[] inBuff = new byte[fs.Length ];
if(fs.CanRead)
{
//原理: 通过文件前三位确定编码
Byte[] Bt = new Byte[3];
fs.Read(Bt, 0, 3);
if(Bt[0] == 255 && Bt[1] == 254)
srcEncoding = Encoding.Unicode;
else if(Bt[0] == 254 && Bt[1] == 255)
srcEncoding = Encoding.BigEndianUnicode;
else if(Bt[0] == 239 && Bt[1] == 187 && Bt[2] == 191)
srcEncoding = Encoding.UTF8;
else
srcEncoding = Encoding.Default;
}
fs.Seek(0, SeekOrigin.Begin); //返回文件头
fs.Read(inBuff, 0, (int)fs.Length);
fs.Close();
byte[] outBuff = Encoding.Convert(srcEncoding, destEncoding, inBuff, 0, inBuff.Length);
byte[] markUnicode = {255,254};
byte[] markBigEndianUnicode = {254,255};
byte[] markUTF8 = {239,187,191};
FileStream outFile = new FileStream(destPath, FileMode.Create);
// 使用文件流方式写入UTF8编码标记
if( destEncoding == Encoding.Unicode)
outFile.Write(markUnicode, 0, markUnicode.Length);
else if( destEncoding == Encoding.UTF8 )
outFile.Write(markUTF8, 0, markUTF8.Length);
if(destEncoding == Encoding.Default && srcEncoding != destEncoding)
outFile.Write(outBuff, 1, outBuff.Length-1);
else
outFile.Write(outBuff, 0, outBuff.Length);
outFile.Close();
}
使用示例:
//无论原来是什么编码均可转换为所需编码文件 :B
ConvertEncoding("d:\\2.aspx", "d:\\unicode.aspx", Encoding.Unicode );
ConvertEncoding("d:\\2.aspx", "d:\\utf8.aspx", Encoding.UTF8 );
ConvertEncoding("d:\\2.aspx", "d:\\gb2312.aspx", Encoding.Default );
下面再看一下完整的对某目录下所有.aspx的批量操作
// 将test目录下所有的.aspx文件转换为Unicode编码
DirectoryInfo di = new DirectoryInfo("d:\\test");
Process(di);
private void Process(DirectoryInfo di)
{
foreach(FileInfo fi in di.GetFiles("*.aspx"))
{
Response.Write(fi.FullName + "<br>");
ConvertEncoding(fi.FullName, fi.FullName, Encoding.Unicode);
}
foreach(DirectoryInfo dic in di.GetDirectories())
{
Process(dic);
}
}
以上代码经过反复测试,请放心使用!!:B 完整源码可以点击 这里 下载
本人心血所注,转载请注明出处谢谢