日期:2014-05-19  浏览次数:21208 次

c#读取文件时如何得到文件的编码类型
在读取文本文件时如何得到   被读取文件的编码类型?
下面这段代码读取文件时,编码类型不同的文件读出是乱码?
private   void   button2_Click(object   sender,   System.EventArgs   e)
{//文件打开控件的用法
  //文件过滤器
this.openFileDialog1.Filter= "文本文件(*.txt)|*.txt|所有文件|*.* ";

                    this.openFileDialog1.ShowDialog();
//获取文件的路径
  this.textBox3.Text=this.openFileDialog1.FileName;
                     
                      //读取文件到文本框中
try
{
if(!File.Exists(this.textBox3.Text.Trim()))
{
MessageBox.Show( "文件不存在 ");
}
else
{//打开文件流
FileStream   fs=File.OpenRead(this.textBox3.Text.Trim());
                          //创建一个byte数组读取
byte[]   arr=new   byte[fs.Length];
                 
UTF8Encoding   datautf=new   UTF8Encoding(true);
        if(arr.Length> 0)
            {
                  fs.Read(arr,0,arr.Length);
this.textBox4.Text=datautf.GetString(arr);
fs.Close();
            }

  }
        }catch(IOException   ex)
{
                    ex.StackTrace.ToString();
}
                   
}

------解决方案--------------------
需要判断文件流的前三个字节来判断编码。
或者使用
StreamReader sr = new StreamReader( "filepath ", true/*detectEncodingFromByteOrderMarks*/);

通常,当一个软件打开一个文本时,它要做的第一件事是决定这个文本究竟是使用哪种字
符集的哪种编码保存的。软件有几种途径来决定文本的字符集和编码,
最标准的途径是检测文本最开头的几个字节,楼主可以以不同编码保存后研究一下各种格式看看.比如

开头字节 Charset/encoding

EF BB BF UTF-8

FE FF UTF-16/UCS-2, little endian