C#讀取中文檔案亂碼的解方法

來源:互聯網
上載者:User
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];        }    }}
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.