【发布时间】:2010-09-27 05:58:41
【问题描述】:
我的程序必须读取使用各种编码的文件。它们可能是 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 在Character encoding detection 上的博客条目,其中列出了各种语言的算法。
我在该页面上发现了 Delphi 的提及,它直接将我带到了 the Free OpenSource ChsDet Charset Detector at SourceForge,它是用 Delphi 编写的,基于 Mozilla 的 i18n 组件。
太棒了!感谢所有回答的人(全部 +1),感谢 ShreevatsaR,再次感谢 Stackoverflow,帮助我在不到一个小时内找到答案!
【问题讨论】:
-
感谢编辑! ChsDet 似乎在工作!
标签: algorithm delphi encoding delphi-2009 byte-order-mark