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

enpc 9年前發布 | 2K 次閱讀 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];
            }
        }
    }</pre> 


 本文由用戶 enpc 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!