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#程序设计有所帮助。