C#读取中文文件出现乱码的解决方法
本文实例讲述了C#读取中文文件出现乱码的解决方法。分享给大家供大家参考。具体分析如下:
先来看这段代码:
FileStreamaFile=newFileStream(SingleFile,FileMode.Open);
StreamReadersr=newStreamReader(aFile,Encoding.GetEncoding("gb2312"),true);
stringFileContent=sr.ReadToEnd();
aFile.Close();
ProcessDataPd=newProcessData();
Pd.ProceData(FileContent);
StreamReader使用3个参数最后一个自动检测utf-8,中文大部分是gb2312,如果不是utf-8,就用gb2312
系统自带utf检测,见如下:
privatevoidDetectEncoding()
{
if(this.byteLen>=2)
{
this._detectEncoding=false;
boolflag=false;
if((this.byteBuffer[0]==0xfe)&&(this.byteBuffer[1]==0xff))
{
this.encoding=newUnicodeEncoding(true,true);
this.CompressBuffer(2);
flag=true;
}
elseif((this.byteBuffer[0]==0xff)&&(this.byteBuffer[1]==0xfe))
{
if(((this.byteLen<4)||(this.byteBuffer[2]!=0))||(this.byteBuffer[3]!=0))
{
this.encoding=newUnicodeEncoding(false,true);
this.CompressBuffer(2);
flag=true;
}
else
{
this.encoding=newUTF32Encoding(false,true);
this.CompressBuffer(4);
flag=true;
}
}
elseif(((this.byteLen>=3)&&(this.byteBuffer[0]==0xef))&&((this.byteBuffer[1]==0xbb)&&(this.byteBuffer[2]==0xbf)))
{
this.encoding=Encoding.UTF8;
this.CompressBuffer(3);
flag=true;
}
elseif((((this.byteLen>=4)&&(this.byteBuffer[0]==0))&&((this.byteBuffer[1]==0)&&(this.byteBuffer[2]==0xfe)))&&(this.byteBuffer[3]==0xff))
{
this.encoding=newUTF32Encoding(true,true);
this.CompressBuffer(4);
flag=true;
}
elseif(this.byteLen==2)
{
this._detectEncoding=true;
}
if(flag)
{
this.decoder=this.encoding.GetDecoder();
this._maxCharsPerBuffer=this.encoding.GetMaxCharCount(this.byteBuffer.Length);
this.charBuffer=newchar[this._maxCharsPerBuffer];
}
}
}
希望本文所述对大家的C#程序设计有所帮助。