C#:如何确定我的编码是否正确

C#:如何确定我的编码是否正确,c#,encoding,byte,filestream,C#,Encoding,Byte,Filestream,我对文件、流和不同的代码页很陌生。 看,这是我的问题: 我得到了一些文本文件,其中一些是用代码页Windows-1252创建的,一些仍然是IBM850,有时是UTF8。当我导入它们时,我的数据库会显示ä,ö,ü,ß的各种符号,因为我用错误的代码页读取它们。只有当我使用正确的代码页导入它们时,一切正常 我认为这是一个很好的方法: 使用codepage X将ä,ö,ü,ß转换为字节数组 例如: 浏览文本文件,并将每个字母字节数组与上面的字母字节数组进行比较。 如果找到,请使用该代码页,否则请尝试其他

我对文件、流和不同的代码页很陌生。 看,这是我的问题:

我得到了一些文本文件,其中一些是用代码页Windows-1252创建的,一些仍然是IBM850,有时是UTF8。当我导入它们时,我的数据库会显示ä,ö,ü,ß的各种符号,因为我用错误的代码页读取它们。只有当我使用正确的代码页导入它们时,一切正常

我认为这是一个很好的方法:

使用codepage X将ä,ö,ü,ß转换为字节数组

例如:

浏览文本文件,并将每个字母字节数组与上面的字母字节数组进行比较。 如果找到,请使用该代码页,否则请尝试其他代码页

这是我不明白的: 如何将文本文件中字母的字节与我要查找的字母的字节数组进行比较。 例如:

有没有其他方法可以获得正确的代码页?
我有正确的解决方案吗?

我会尝试使用一种编码加载文件,如果遇到意外字符,请使用另一种编码加载。

不幸的是,没有一种万无一失的方法,因为某个字节流在多个编码中可能有意义

一种方法是使用其他业务数据进行猜测和启发式。你能从文件名推断出编码吗?来自其他元数据,比如发件人名称?如果是这样,请尝试使用该选项进行筛选

如果没有,你可以尝试挖掘和猜测。如果文件可能很大,正如您所说,只需偷看并输入一个文本样本(比如,前512字节就足够了)。你能猜出内容是什么吗?是英语/希伯来语的自由文本还是类似的?如果是这样,请在512字节样本中查找常用字。文件是否包含固定格式?如果是的话,就去寻找它。然后在实时样本上运行这些测试,查看结果,调整测试,然后重试,直到您有相对好的机会识别编码


祝你好运

嗨,谢谢你的快速回复。问题是文件可能很大,导入需要一定的时间,最大的问题是我不做导入。我只是开始编程:)格里茨“如果我遇到”是编程的意思。嗨,非常感谢你所有的提示!现在我没有这种信息。文件中的所有文本都是德语,第一个位置可以是字母,其他文件中可以是数字。这就是为什么我认为我的最佳选择是/是将所有内容以字节为单位,我在文本的某个地方找到了这些ä,ö,ü和ß再次感谢你,我希望我能找到某种模式来匹配。
byte[] myAeKl = Encoding.GetEncoding("IBM850").GetBytes("ä");

byte[] myAeGr = Encoding.GetEncoding("IBM850").GetBytes("Ä");
if (Textfile.Letter == myAeKl || Textfile.Letter == myAeGr)
...