如何以编程方式识别文件的字符集?

时间:2013-09-24 15:08:22

标签: unicode character-encoding ascii

从详细的角度来看,如何识别文件的字符集?我发现的一些信息是通过文件的幻数检查,但我发现的其他文章偏离了这一点。

我尝试用hexdump打开以不同字符集(例如ASCII / UTF8)编码的不同文件,并且该文件的字符集没有文件标识符。

3 个答案:

答案 0 :(得分:4)

通过查看原始字节转储几乎不可能识别任意字符集。一些字符集显示了可以识别它们的典型模式,但仍然没有明确匹配。您可以做的最好的事情通常是排除猜测,从具有特定规则的字符集开始。如果文件在UTF-8中无效,则尝试Shift-JIS,然后尝试BIG-5等...问题是任何文件在Latin-1和其他单字节编码中有效。这就是让它根本不可能的原因。将任何一个单字节字符集与任何其他单字节字符集区分开来几乎是不可能的。最后,您必须使用文本分析来确定解码的文本是否有意义,或者它是否看起来像是乱码,因此编码可能不正确。

简而言之:没有万无一失的方法来检测字符集,句号。您应始终拥有指定字符集的元数据。

答案 1 :(得分:1)

没有

我编写了一个检查UTF-8一致性(特殊位语法)的库,并尝试通过保持每种语言最常用的100个单词来识别语言和相应的字符编码。单字节编码ISO-8859- *通常可以从语言内容中导出。

一般来说,没有神奇的饼干。 UTF知道一个可选的BOM,它更多地用于UTF-16(Little Endian,Big Endian)。

所以也许可以搜索语言识别器。

答案 2 :(得分:0)

对于所有编码都无法可靠地执行此操作,并且没有通用的幻数或标识符。你可以使用启发式算法来编写UTF-8等编码,但在大多数情况下,你只需要知道编码。