从详细的角度来看,如何识别文件的字符集?我发现的一些信息是通过文件的幻数检查的,但我发现的其他文章偏离了这一点。
我尝试打开以不同字符集(例如 ASCII/UTF8)编码的不同文件,hexdump
并且文件的字符集没有文件标识符。
从详细的角度来看,如何识别文件的字符集?我发现的一些信息是通过文件的幻数检查的,但我发现的其他文章偏离了这一点。
我尝试打开以不同字符集(例如 ASCII/UTF8)编码的不同文件,hexdump
并且文件的字符集没有文件标识符。
仅通过查看原始字节转储来识别任意字符集实际上是不可能的。一些字符集显示了可以识别它们的典型模式,但这仍然不能明确匹配。您可以做的最好的事情通常是通过排除来猜测,从具有某些规则的字符集开始。如果文件在 UTF-8 中无效,则尝试 Shift-JIS,然后是 BIG-5 等...问题是任何文件在 Latin-1 和其他单字节编码中有效。这就是使它如此根本不可能的原因。几乎不可能将任何一个单字节字符集与任何其他单字节字符集区分开来。最后,您必须使用文本分析来确定解码的文本是否有意义,或者它是否看起来像乱码,因此编码可能不正确。
简而言之:没有万无一失的检测字符集的方法。您应该始终拥有指定字符集的元数据。
不。
我编写了一个库来检查 UTF-8 一致性(特殊位语法),并尝试通过保留每种语言的 100 个最常用词来识别语言和相应的字符编码。单字节编码 ISO-8859-* 通常可以从语言内容中导出。
一般来说,没有神奇的饼干。UTF 知道一个可选的 BOM,它更多地用于 UTF-16(Little Endian,Big Endian)。
所以也许搜索语言识别器。
没有办法对所有编码可靠地做到这一点,也没有通用的幻数或标识符。您可以对某些编码(如 UTF-8)使用启发式方法,但在大多数情况下,您只需要知道编码即可。