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

311
在我们的应用程序中,我们从不同的来源接收文本文件( .txt .csv 等)。在读取这些文件时,由于这些文件是使用不同/未知的代码页创建的,因此有时会包含垃圾内容。
是否有一种方法可以自动检测文本文件的代码页? StreamReader 构造函数中的 detectEncodingFromByteOrderMarks 对于 UTF8 和其他标记文件的 unicode 有效,但我正在寻找一种检测代码页(例如 ibm850 windows1252 )的方法。
感谢您的回答,这是我所做的事情。
我们收到的文件来自终端用户,他们对代码页毫不了解。接收器也是终端用户,到目前为止,这就是他们对代码页的了解:代码页存在,并且很麻烦。
解决方案:
  • 在记事本中打开接收到的文件,查看乱码文本。如果某个人被称为弗朗索瓦或其他什么,请利用您的人类智慧猜测一下。
  • 我创建了一个小型应用程序,用户可以使用它来打开文件,并输入用户知道将出现在该文件中的文本,当使用正确的代码页时。
  • 循环遍历所有代码页,并显示提供用户文本解决方案的代码页。
  • 如果有多个代码页弹出,请要求用户指定更多文本。
21个回答

-1

已经过去了10年(!) ,但我仍然没有看到提到微软的好的、非GPL许可的解决方案:IMultiLanguage2 API。

大多数已经提到的库都是基于Mozilla的UDE,而浏览器似乎已经解决了类似的问题。我不知道Chrome的解决方案是什么,但自从IE 5.0以来,微软已经发布了他们的解决方案,它具有以下特点:

  1. 没有GPL等许可问题,
  2. 得到支持和维护,可能会永远存在,
  3. 提供丰富的输出 - 所有有效的编码/代码页候选项以及置信度分数,
  4. 令人惊讶地易于使用(只需一个函数调用)。

这是一个本地的COM调用,但是Carsten Zeumer做了一些非常好的工作(这里),处理了.NET使用中的互操作混乱。虽然还有其他一些库可用,但总的来说,这个库没有得到应有的关注。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接