Heim  >  Artikel  >  Backend-Entwicklung  >  C#读取中文文件乱码的解方法

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

大家讲道理
大家讲道理Original
2016-11-10 16:30:151601Durchsuche

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];
        }
    }
}


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn