| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
enpc
10年前发布

C#读取中文文件乱码的解方法

FileStream aFile = new FileStream(SingleFile, FileMode.Open);  StreamReader sr = new StreamReader(aFile, Encoding.GetEncoding("gb2312"), true);  string FileContent = sr.ReadToEnd();  aFile.Close();  ProcessData Pd = new ProcessData();  Pd.ProceData(FileContent);  

StreamReader 使用3个参数 最后一个自动检测utf-8,中文大部分是gb2312,如果不是utf-8,就用gb2312


系统自带utf 检测 ,见如下
            private void DetectEncoding()          {              if (this.byteLen >= 2)              {                  this._detectEncoding = false;                  bool flag = false;                  if ((this.byteBuffer[0] == 0xfe) && (this.byteBuffer[1] == 0xff))                  {                      this.encoding = new UnicodeEncoding(true, true);                      this.CompressBuffer(2);                      flag = true;                  }                  else if ((this.byteBuffer[0] == 0xff) && (this.byteBuffer[1] == 0xfe))                  {                      if (((this.byteLen < 4) || (this.byteBuffer[2] != 0)) || (this.byteBuffer[3] != 0))                      {                          this.encoding = new UnicodeEncoding(false, true);                          this.CompressBuffer(2);                          flag = true;                      }                      else                      {                          this.encoding = new UTF32Encoding(false, true);                          this.CompressBuffer(4);                          flag = true;                      }                  }                  else if (((this.byteLen >= 3) && (this.byteBuffer[0] == 0xef)) && ((this.byteBuffer[1] == 0xbb) && (this.byteBuffer[2] == 0xbf)))                  {                      this.encoding = Encoding.UTF8;                      this.CompressBuffer(3);                      flag = true;                  }                  else if ((((this.byteLen >= 4) && (this.byteBuffer[0] == 0)) && ((this.byteBuffer[1] == 0) && (this.byteBuffer[2] == 0xfe))) && (this.byteBuffer[3] == 0xff))                  {                      this.encoding = new UTF32Encoding(true, true);                      this.CompressBuffer(4);                      flag = true;                  }                  else if (this.byteLen == 2)                  {                      this._detectEncoding = true;                  }                  if (flag)                  {                      this.decoder = this.encoding.GetDecoder();                      this._maxCharsPerBuffer = this.encoding.GetMaxCharCount(this.byteBuffer.Length);                      this.charBuffer = new char[this._maxCharsPerBuffer];                  }              }          }