现在的文本文件的编码方式到底有哪几种?特征码都分别是什么,希望高手给解答下。
我编写了如下的程序,结果还是有很多文本文件的编码是乱码。
但是用editplus打开,就是正常的。
先贴出我的程序片段://扩展名未必是txt,但是肯定是以本文方式记录的。这个程序是反复调用的,处理的文件肯定超过几百个,所以,大家不要建议我用UE打开,然后分别看每个文件的编码。                string url = msFileUrl.Text + msFileName.Text;
                FileStream str2 = new FileStream(@url, FileMode.Open);
                byte[] arr = new byte[20971520];//一般不会有超过20兆的文本文件,但是,肯定超过2K。
                
                string str = null;                str2.Read(arr, 0, 20971520);
                str2.Close();                string s = "";
                for (int i = 0; i < 500; i++)
                {
                    s += Convert.ToInt32(arr[i].ToString()).ToString("X");
                }                string filetype = "";
                Encoding myencode = null;                if (s.Contains("EFBB"))
                {
                    filetype = "utf8";
                    myencode = Encoding.UTF8;
                    str = myencode.GetString(arr);
                }
                else if (s.Contains("FFFE"))
                {
                    filetype = "Unicode";
                    myencode = Encoding.Unicode;
                    str = myencode.GetString(arr);
                }
                else if (s.Contains("FEFF"))
                {
                    filetype = "Unicode big endian";
                    myencode = Encoding.BigEndianUnicode;
                    str = myencode.GetString(arr);
                }
                else
                {
                    filetype = "ANSI";
                    myencode = Encoding.Default;
                    str = myencode.GetString(arr);
                }                int strlen = str.Length;
                for (int i = 0; i < strlen; i++)
                {
                    if (str[i].ToString() == "\0")
                    {
                        str = str.Substring(0, i);
                        break;
                    }
                }                restext.Text = str;                //myencode 是有用的,我后面还要用同样的编码方式,生成文件。
这个程序其实,就是打开现有文件,在指定的位置插入几行文字,然后再把那个文件覆盖掉。(这些都实现了,就是遇到有些文件包含的中文时,会出乱码)我通过EditPlus选择编码,发现最少有60种编码方式,但是除了网上流行的那几个外,我都不知道。
想让大家补充的就是,还有什么编码我没有考虑到的,最好大家能给个比较全面的。
分数不够的话,可以再加。

解决方案 »

  1.   

    FileStream str2 = new FileStream(@url, FileMode.Open); 
    这里就要指定编码方式吧。
      

  2.   

    StreamWriter s = new StreamWriter(fileStream)
    StreamWriter的读方法会自动判编码格式的吧
      

  3.   

    .NET默认的编码是UTF-8,无法读取GB2312的文件,这种情况下一般用:   
    StreamReader sr = new StreamReader(@"C:\a.txt", System.Text.Encoding.GetEncoding(936),true);   
    来解决。true是让Framework来检测Byte Order Mask(BOM),如果文件有BOM,就会根据BOM设置成文件实际的编码,如果没有BOM,就按第二个参数所制定的编码来读取。
    这是一种比较好的兼容方式,如果不设置true,那么就只能读取GB2312文件,而无法读取Utf-8了。   
        
    Default依赖于操作系统的语言设置,如果读简体中文,就用gb2312
      

  4.   

    FileStream str2 = new FileStream(@url, FileMode.Open); 
    可以不指定,
    因为那个时候,我还不知道文件的具体编码呢。
    只是先把那些作为二进制读进来,然后里面判断,用判断出来的指定。
    但是,我不知道特征符号。
    只知道上面我写的那几个。
    还有什么,希望大家告诉我,现在可能主要集中在 utf8 上了,测试过程中,发现特征不止包容EFBB。其他的也有,
    大家谁知道,希望告知一下。
      

  5.   

    看看。。看看。。里边有个读写的类~http://www.cnblogs.com/litianfei/archive/2008/04/01/1133122.html
      

  6.   

    StreamReader sr = new StreamReader(@"C:\a.txt", System.Text.Encoding.GetEncoding(936),true); 自己会根据BOM设置成文件实际的编码的吧~
      

  7.   

    看了看 http://www.cnblogs.com/litianfei/archive/2008/04/01/1133122.html 很好,
    不过,总感觉跟我上面给的程序差不多。
      

  8.   

    StreamReader sr = new StreamReader(@"C:\a.txt", System.Text.Encoding.GetEncoding(936),true); 
    不成功,仍然出现乱码。                string url = msFileUrl.Text + msFileName.Text;                StreamReader sr = new StreamReader(@url, System.Text.Encoding.GetEncoding(936), true);
                    string m;
                    m = sr.ReadToEnd();
                    restext.Text = m;
                    sr.Close();
                    return;
      

  9.   

    首先按你的方法判断是否是UTF8,如果不是,sr = new StreamReader(path,Encoding.Default);是的话sr = new StreamReader(path,Encoding.UTF8)
      

  10.   

    .NET默认的编码是UTF-8,无法读取GB2312的文件,这种情况下一般用:  
    StreamReader sr = new StreamReader(@"C:\a.txt", System.Text.Encoding.GetEncoding(936),true);  
    来解决。true是让Framework来检测Byte Order Mask(BOM),如果文件有BOM,就会根据BOM设置成文件实际的编码,如果没有BOM,就按第二个参数所制定的编码来读取。 
    这是一种比较好的兼容方式,如果不设置true,那么就只能读取GB2312文件,而无法读取Utf-8了。  
    Default依赖于操作系统的语言设置,如果读简体中文,就用gb2312
      

  11.   

    楼主打开这个网页
    http://www.cnblogs.com/hhh/archive/2007/01/27/632251.html
    注意帖子的例子,和下方的dll下载.也可以直接下载源代码用
    我也正好遇到和你一样的问题,用这个可以很好的解决!!!!!!!!!!!!!
    我也很感谢贴主,楼主弄好了,记得给分.
    贴主的是针对网页比你读取txt还难些.
      

  12.   

    我上面的那个是针对内容的所有编码进行的测试然后得到结果,我试过了,很好用.
    不需要考虑BOM
      

  13.   

    看了看 http://www.cnblogs.com/hhh/archive/2007/01/27/632251.html 下面附带的源代码,果然支持的编码多了一些,但是,还是不能把所有问题都解决。
    现在程序已经做完了,我把那些不能正确识别的文件都手动解决了,有一百多个文件,累人啊。那个帖子给的test程序有错误,哎。
    不过,这些都无所谓了。现在的编码真的是越来越多了,也越来越怪异了,感觉有一些编码方式咱们根本就不知道。哎。准备结贴。
      

  14.   

    楼主,那个给的测试有一个小错误,一个found的bool变量没有声明,因为贴主也是从那个作者那里copy下来的.你试试
    另外,你应该不会感到任何郁闷才对,因为你可以看看源代码,它几乎支持你所能看到所有的编码格式了.至于具体是什么语言.这个不是你的主帖所问的问题了.