System.IO.StreamReader sr = new System.IO.StreamReader(openFileDialog1.FileName, System.Text.Encoding.Default);
     rtxtMain.Text= sr.ReadToEnd();
           sr.Close();
这样读取有中问的文件为什么有的会会乱码而有的不会,请教.

解决方案 »

  1.   


    文件的編碼不同,常見的編碼有ANSI、Unicode、Utf-8,等,根據文件頭,可以大體判斷出來。
      

  2.   

    准确地说是本机ANSI码...由OS语言设置决定...lz能正确解码部分汉字说明你的系统是简体中文...那你的系统ANSI码就是GB2312...对于不是GB2312编码的文件例如Unicode或BIG-5当然就显示乱码...所以你在处理之前必须指定正确的文字编码...
      

  3.   

    对滴,default是默认,并不是全部都识别的
      

  4.   

    是这样的我用VS建的Cs文件
    有的文件汉字可以正确显示而有的不能,
    难道同一个VS生成的cs文件编码也不一样??
      

  5.   

    判断文件头,根据不同编码载入。参考如下代码:
    using System.IO;public string LoadTextFile(string filename)
    {
        if (!File.Exists(filename)) return string.Empty;
        FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
        try
        {
            byte[] buffer = new byte[3];
            int l = fs.Read(buffer, 0, buffer.Length);
            if (l >= 2 && buffer[0] == 0xff && buffer[1] == 0xfe) // unicode
            {
                buffer = new byte[fs.Length - 2];
                fs.Seek(2, SeekOrigin.Begin);
                fs.Read(buffer, 0, buffer.Length);
                return Encoding.Unicode.GetString(buffer);
            }        if (l >= 2 && buffer[0] == 0xfe && buffer[1] == 0xff) // unicodeFFFE
            {
                buffer = new byte[fs.Length - 2];
                fs.Seek(2, SeekOrigin.Begin);
                fs.Read(buffer, 0, buffer.Length);
                return Encoding.BigEndianUnicode.GetString(buffer);
            }        if (l >= 3 && buffer[0] == 0xef && buffer[1] == 0xbb && buffer[2] == 0xbf) // utf8
            {
                buffer = new byte[fs.Length - 3];
                fs.Seek(3, SeekOrigin.Begin);
                fs.Read(buffer, 0, buffer.Length);
                return Encoding.UTF8.GetString(buffer);
            }        // default
            fs.Seek(0, SeekOrigin.Begin);
            buffer = new byte[fs.Length];
            fs.Read(buffer, 0, buffer.Length);
            return Encoding.Default.GetString(buffer);
        }
        finally
        {
            fs.Close();
        }
    }