Unicode 如何通过编程识别文件的字符集?

Unicode 如何通过编程识别文件的字符集?,unicode,character-encoding,ascii,Unicode,Character Encoding,Ascii,从详细的角度来看,如何识别文件的字符集?我发现的一些信息是通过文件的神奇数字进行检查的,但我发现的其他文章偏离了这一点 我曾尝试使用hextump打开不同字符集编码的不同文件(例如ASCII/UTF8),但文件的字符集上没有文件标识符。对于所有编码,都无法可靠地执行此操作,也没有通用的幻数或标识符。您可以对某些编码(如UTF-8)使用启发式,但在大多数情况下,您只需知道编码。对于所有编码,没有可靠的方法,也没有通用的幻数或标识符。您可以对某些编码(如UTF-8)使用启发式,但在大多数情况下,您只

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


我曾尝试使用
hextump
打开不同字符集编码的不同文件(例如ASCII/UTF8),但文件的字符集上没有文件标识符。

对于所有编码,都无法可靠地执行此操作,也没有通用的幻数或标识符。您可以对某些编码(如UTF-8)使用启发式,但在大多数情况下,您只需知道编码。

对于所有编码,没有可靠的方法,也没有通用的幻数或标识符。您可以对某些编码(如UTF-8)使用启发式,但在大多数情况下,您只需知道编码。

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

一般来说,没有魔法饼干。UTF知道一个可选BOM表,它更多地用于UTF-16(小端、大端)

因此,也许可以搜索语言识别器。

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

一般来说,没有魔法饼干。UTF知道一个可选BOM表,它更多地用于UTF-16(小端、大端)


因此,也许可以搜索语言识别器。

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


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

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


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

Visit:[[1]:猜测文本编码不太好。你应该尽量避免这样做;让数据源告诉你编码。Visit:[[1]:猜测文本编码不太好。你应该尽量避免这样做;让数据源告诉你编码。