我的程序必须读取使用各种编码的文件。它们可能是 ANSI、UTF-8 或 UTF-16(大端或小端)。
当 BOM(字节顺序标记)在那里时,我没有问题。我知道文件是 UTF-8 还是 UTF-16 BE 或 LE。
我想假设当没有 BOM 文件是 ANSI 时。但我发现我正在处理的文件经常缺少它们的 BOM。因此,没有 BOM 可能意味着文件是 ANSI、UTF-8、UTF-16 BE 或 LE。
当文件没有 BOM 时,扫描某些文件并最准确地猜测编码类型的最佳方法是什么?如果文件是 ANSI,我希望接近 100% 的时间,如果文件是 UTF 格式,我希望接近 100%。
我正在寻找一种通用的算法方法来确定这一点。但我实际上使用的是 Delphi 2009,它知道 Unicode 并且有一个 TEncoding 类,所以特定的东西将是一个奖励。
回答:
ShreevatsaR 的回答让我在 Google 上搜索“通用编码检测器 delphi”,这让我感到惊讶的是,这篇文章在仅存活了大约 45 分钟后就被列为第一名!那是快速的googlebotting!Stackoverflow 如此迅速地获得第一名也令人惊讶。
Google 中的第二篇文章是 Fred Eaker 撰写的关于字符编码检测的博客文章,其中列出了各种语言的算法。
我在那个页面上发现了 Delphi,它直接把我带到了 SourceForge 的 Free OpenSource ChsDet Charset Detector,它是用 Delphi 编写的,基于 Mozilla 的 i18n 组件。
极好的!感谢所有回答的人(全部 +1),感谢 ShreevatsaR,再次感谢 Stackoverflow,帮助我在不到一个小时的时间内找到答案!