如何检测文本文件的编码/代码页

在我们的应用程序中,我们接收来自不同来源的文本文件( .txt.csv等)。 在阅读时,这些文件有时会包含垃圾,因为这些文件是在不同的/未知的代码页中创建的。

有没有办法(自动)检测文本文件的代码页?

detectEncodingFromByteOrderMarks ,对StreamReader构造,适用于UTF8等统一标记的文件,但是我正在寻找一种方法来检测代码页,像ibm850windows1252


感谢您的回答,这就是我所做的。

我们收到的文件来自最终用户,他们对代码页没有任何线索。 接收者也是最终用户,现在这是他们对代码页的了解:代码页存在并且很烦人。

解:

  • 在记事本中打开收到的文件,看一个乱码的文本。 如果有人被称为弗朗索瓦什么的东西,用你的人类智慧你可以猜出这个。
  • 我创建了一个小应用程序,用户可以使用该应用程序打开该文件,并在使用正确的代码页时输入用户知道该文件将出现在文件中的文本。
  • 遍历所有代码页,并显示用户提供的文本提供解决方案的代码页。
  • 如果弹出一个代码页,请让用户指定更多文本。

  • 你无法检测到代码页,你需要告诉它。 你可以分析字节并猜测它,但是这可能会导致一些奇怪的(有时候很有趣)的结果。 我现在找不到它,但我确信记事本可以被诱骗显示中文的英文文本。

    无论如何,这是你需要阅读的:绝对最低限度的每一个软件开发者绝对,积极地必须知道Unicode和字符集(没有借口!)。

    具体来说,乔尔说:

    关于编码的一个最重要的事实

    如果你完全忘记了我刚才解释的一切,请记住一个非常重要的事实。 在不知道使用哪种编码的情况下生成一个字符串是没有意义的。 你不能再将头伸进沙子里,假装“简单”文本是ASCII。 没有像纯文本那样的东西。

    如果您有字符串,内存,文件或电子邮件中的信息,则必须知道其中的编码,或者无法正确解释或显示给用户。


    如果您正在寻找检测非UTF编码(即没有BOM),那么您基本上只能对文本进行启发式分析和统计分析。 你可能想看看关于通用字符集检测的Mozilla论文(同样的链接,通过Wayback Machine有更好的格式化)。


    您是否尝试过Mozilla Universal Charset Detector的C#端口?

    来自http://code.google.com/p/ude/的示例

    public static void Main(String[] args)
    {
        string filename = args[0];
        using (FileStream fs = File.OpenRead(filename)) {
            Ude.CharsetDetector cdet = new Ude.CharsetDetector();
            cdet.Feed(fs);
            cdet.DataEnd();
            if (cdet.Charset != null) {
                Console.WriteLine("Charset: {0}, confidence: {1}", 
                     cdet.Charset, cdet.Confidence);
            } else {
                Console.WriteLine("Detection failed.");
            }
        }
    }    
    
    链接地址: http://www.djcxy.com/p/23707.html

    上一篇: How can I detect the encoding/codepage of a text file

    下一篇: Separate objects from the background. ( Using contour detection )