Rumah  >  Artikel  >  pembangunan bahagian belakang  >  C#读取中文文件乱码的解方法

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

大家讲道理
大家讲道理asal
2016-11-10 16:30:151652semak imbas

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


Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn