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