我对文件、流和不同的代码页很陌生。 看看这是我的问题:
我得到文本文件,其中一些是使用代码页 Windows-1252 创建的,一些仍然是 IBM850,有时是 UTF8。当我导入它们时,我的数据库显示 ä、ö、ü、ß 的各种符号,因为我用错误的代码页读取它们。只有当我使用正确的代码页导入它们时,一切正常。
这是我认为可能是一个好的方法:
将 ä, ö, ü, ß 转换为代码页 X 的字节数组
例如:
byte[] myAeKl = Encoding.GetEncoding("IBM850").GetBytes("ä");
byte[] myAeGr = Encoding.GetEncoding("IBM850").GetBytes("Ä");
浏览文本文件并将每个字母字节数组与上面的进行比较。 如果找到使用该代码页,否则尝试另一个代码页。
这是我不明白的: 如何将文本文件中字母的字节与我要查找的字母的字节数组进行比较。 例如:
if (Textfile.Letter == myAeKl || Textfile.Letter == myAeGr)
...
有没有其他方法可以得到正确的代码页? 我的解决方案是否正确?
最佳答案
不幸的是,没有万无一失的方法,因为特定的字节流在多种编码中可能有意义。
其中一种方法是使用其他业务数据进行猜测和启发。你能从文件名中推断出编码吗?来自其他一些元数据,例如发件人姓名?如果是这样,请尝试使用它进行过滤。
如果没有,您可以尝试挖掘和猜测。如果文件很大,正如您所说,只需查看并引入文本示例(例如,前 512 个字节,就足够了)。您有什么办法可以猜测内容是什么吗?它是英语/希伯来语或类似语言的自由文本吗?如果是这样,请在 512 字节样本中查找常用词。文件是否包含固定格式?如果是这样,请寻找它。然后在实时样本上运行这些测试,查看结果,调整测试,然后重试,直到您有相对较好的机会识别编码。
祝你好运!
关于C#:如何确定我的编码是否正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9016627/