我的程序有阅读的文件,使用的各种编码。他们可以ANSI,UTF-8或UTF-16(或大或小endian).

当BOM(Byte Order标)是存在的,我都没有问题。我知道如果文件是UTF-8或UTF-16或LE。

我想假设在没有物料清单,该文件是ANSI。但是我发现的文件,我处理的往往是失踪他们的物料清单。因此没有BOM可能意味着该文件是ANSI,UTF-8,UTF-16或LE。

当没有任何文件的物料清单,将具有什么样的最好方式扫描一些文件和最准确地猜类型的编码?我想是正确的接近100%的时间,如果文件是ANSI和在高90的,如果它是一个UTF格式。

我在寻找一个通用的计算方法来确定这一点。但是我实际上使用特尔斐2009哪知道Unicode和有TEncoding类,所以一些具体的事情,会被奖金。


回答:

ShreevatsaR的答案,导致我在谷歌搜索"通用的编码检测器的特尔斐",这让我感到惊讶,在具有这个员额列在#1的位置之后被活着只有45分钟!这是快速googlebotting!!还令人惊讶的是,计算器进入1个地方这么快。

第2条在谷歌的一个博客的进入弗雷德Eaker上 字符编码的检测 列算法的各种语言。

我发现提Delphi在该网页上,并且它导致我觉 免费的开放源代码ChsDet Charset探测器在SourceForge 写在德尔福和基于Mozilla的i18n组成部分。

太棒了!谢谢你所有的那些人回答(有+1),谢谢你ShreevatsaR,并再次感谢你的计算器,帮助我找到我的答案在不到一个小时!

有帮助吗?

解决方案

也许你可以掏出来Python脚本,使用 Chardet:普遍的编码器.这是一个重新实现的字符编码的检测,使用的火狐,并用于通过 许多不同的应用程序.有用的链接: Mozilla的代码, 研究论文 这是根据(具有讽刺意味的是,我的火狐无法正确检测的编码的那页), 简短的说明, 详细的解释.

其他提示

下面是记事本请问是

有也是蟒通用编码探测器它们可以对检查。

我的猜测是:

  • 首先,检查文件的字节值是否小于 32(制表符/换行符除外)。如果是,则它不能是 ANSI 或 UTF-8。因此 - UTF-16。只需要弄清楚字节序即可。为此,您可能应该使用一些有效的 Unicode 字符代码表。如果遇到无效代码,请尝试其他合适的字节顺序。如果适合(或不适合),请检查哪一个具有较大百分比的字母数字代码。您也可以尝试搜索换行符并从中确定字节序。除此之外,我不知道如何检查字节顺序。
  • 如果文件不包含小于 32 的值(除了所述空格),则它可能是 ANSI 或 UTF-8。尝试将其解析为 UTF-8,看看是否得到任何无效的 Unicode 字符。如果你这样做,它可能是 ANSI。
  • 如果您期望文档采用非英语单字节或多字节非 Unicode 编码,那么您就不走运了。您能做的最好的事情就是使用 Internet Explorer 之类的工具,它可以制作字符值的直方图并将其与已知语言的直方图进行比较。它经常工作,但有时也会失败。而且您必须拥有每种语言的大型字母直方图库。

ASCII?没有现代操作系统使用的ASCII了。它们都使用8位代码,至少,这意味着它或者UTF-8,ISOLatinX,WinLatinX,的MacRoman,按住Shift-JIS或任何其他就在那里。

我知道的唯一的测试是检查无效UTF-8字符。如果您发现任何,那么你知道它不能是UTF-8。同样可能是可能的UTF-16。但是,当它没有Unicode设置,那么这将是很难判断的Windows代码页可能是。

我知道通过让用户选择从所有可能的编码列表中选择一个默认的处理这个大多数编辑。

有是代码在那里用于检查UTF字符的有效性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top