在某些情况下对文本文件进行读取会出现乱码,这种情况是因为指定的文本文件的编码类型不是系统默认的编码类型或者不是读取时指定的编码类型。解决这种出现乱码的情况可以先获取指定文本文件的编码类型,然后在进行内容的读取。这样尽可能的避免读取文本文件时出现乱码的机率。代码如下:
/// <summary>
/// 获取指定文件的编码
/// 以防止在不知道文件编码格式的情况下处理文件而造成的乱码问题
/// </summary>
/// <param name="filename">文件路径</param>
/// <returns></returns>
public System.Text.Encoding GetFileEncodeType(string filename)
{
if (!File.Exists(filename))
{
return System.Text.Encoding.Default;
}
System.Text.Encoding ReturnReturn = null;
System.IO.FileStream fs = null;
System.IO.BinaryReader br = null;
try
{
fs = new System.IO.FileStream(filename, System.IO.FileMode.Open, System.IO.FileAccess.Read);
br = new System.IO.BinaryReader(fs);
byte[] buffer = br.ReadBytes(2);
if (buffer.Length > 0 && buffer[0] >= 0xEF)
{
if (buffer[0] == 0xEF && buffer[1] == 0xBB)
{
ReturnReturn = System.Text.Encoding.UTF8;
} else if (buffer[0] == 0xFE && buffer[1] == 0xFF)
{
ReturnReturn = System.Text.Encoding.BigEndianUnicode;
} else if (buffer[0] == 0xFF && buffer[1] == 0xFE)
{
ReturnReturn = System.Text.Encoding.Unicode;
} else
{
ReturnReturn = System.Text.Encoding.Default;
}
} else if (buffer.Length > 0 && buffer[0] == 0xe4 && buffer[1] == 0xbd) //无BOM的UTF-8
{
ReturnReturn = System.Text.Encoding.UTF8;
} else
{
ReturnReturn = System.Text.Encoding.Default;
}
}
catch (Exception ex)
{
ReturnReturn = System.Text.Encoding.Default;
Log.WriteLog(ex.ToString());
}
finally
{
if (br != null)
{
br.Close();
}
if (fs != null)
{
fs.Close();
fs.Dispose();
}
}
return ReturnReturn;
}
转载请注明:清风亦平凡 » C#获取指定文本文件的编码格式