我有一个包含内容的文本文件:
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);
}
}
}
作为输出我得到:
因此,对于Ä € ß ² µ §
,我得到?
。这就是为什么我认为这是因为控制台,所以将其改为UTF8,所以我可能能够获得更好的输出。但它并没有真正帮助。
System.Console.OutputEncoding = System.Text.Encoding.UTF8;
这就是为什么我认为在阅读文件时出现了问题。我应该改变StreamReader的编码。但是没有那么多选择。我正在尝试UTF8,ASCII,但它没有帮助。有什么想法吗?
编辑:感谢Matthew,将System.Text.Encoding.Default
添加到StreamReader是有帮助的。现在只有char €
无法识别。不要得到它,有些字符“特别”吗?
Edit2:好吧,€
只是一个问题,因为控制台是错误的(?)。如果我在调试模式下查看字符串,€
也没问题。
所以现在我的工作解决方案是:
1。)使用默认编码的阅读器:
using (TextReader reader = new StreamReader(fs, System.Text.Encoding.Default))
和
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来非常可靠地确定文件的编码。然后,您可以使用正确的编码打开大多数文件,而您只需付出很少的努力。