无法识别文本文件中的字符(例如€²μ)

时间:2013-02-05 13:34:38

标签: c# .net encoding

我有一个包含内容的文本文件:

A B C D Ä 1 4 0 $ % & € / [ ) = ß ² µ §

如果你问我编码 - 我不知道。如果我用Notepad ++打开它,我会在编码菜单Encoding in ANSI

中看到

我想阅读此文件,并正确识别每个角色。作为代码我有这个:

//open and locking the file
using (FileStream fs = File.Open(@"C:\testfile.txt", FileMode.Open, FileAccess.Read, FileShare.None))
{
    using (TextReader reader = new StreamReader(fs))
    {
        string line;
        //reading and printing each line
        while ((line = reader.ReadLine()) != null)
        {
            System.Console.WriteLine(line);
        }
    }
}

作为输出我得到: enter image description here

因此,对于Ä € ß ² µ §,我得到?。这就是为什么我认为这是因为控制台,所以将其改为UTF8,所以我可能能够获得更好的输出。但它并没有真正帮助。

System.Console.OutputEncoding = System.Text.Encoding.UTF8;

enter image description here

这就是为什么我认为在阅读文件时出现了问题。我应该改变StreamReader的编码。但是没有那么多选择。我正在尝试UTF8,ASCII,但它没有帮助。有什么想法吗?

编辑:感谢Matthew,将System.Text.Encoding.Default添加到StreamReader是有帮助的。现在只有char 无法识别。不要得到它,有些字符“特别”吗?

Edit2:好吧,只是一个问题,因为控制台是错误的(?)。如果我在调试模式下查看字符串,也没问题。

所以现在我的工作解决方案是:

1。)使用默认编码的阅读器:

using (TextReader reader = new StreamReader(fs, System.Text.Encoding.Default))

2.。)不使用控制台输出,只是在调试模式下读取字符串

2 个答案:

答案 0 :(得分:2)

如果您使用ANSI,则可以这样做:

using (TextReader reader = new StreamReader(fs, System.Text.Encoding.Default))

但是,只有当前的代码页对于您正在阅读的文件是正确的时,这才有效。它可能会,但为了完全可移植性,您应该确定您正在使用和使用的实际代码页:

using (TextReader reader = new StreamReader(fs, new System.Text.Encoding(codePageNumber)))

其中 codePageNumber 是文本文件的代码页。

答案 1 :(得分:1)

您可以使用Mozilla Universal Charset Detector,其.NET端口可用here来非常可靠地确定文件的编码。然后,您可以使用正确的编码打开大多数文件,而您只需付出很少的努力。