Maison  >  Article  >  développement back-end  >  C#读取中文文件乱码的解方法

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

大家讲道理
大家讲道理original
2016-11-10 16:30:151652parcourir

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


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn