用于检测字符数组(char*
)的多字节字符编码(UTF-8,UTF-16等)的C / C ++库。奖励还包括检测匹配器何时停止,即检测给定的一组可能编码的前缀匹配范围。
答案 0 :(得分:5)
ICU character set detection。您必须注意,正如ICU文件所述:
这充其量是使用统计数据的不精确操作 启发式。因此,如果您提供的话,检测效果最佳 至少几百个字节的字符数据,大部分都是单个字节 语言。
答案 1 :(得分:2)
如果输入只是ASCII,那么如果流中存在任何高位设置字节,就无法检测应该是什么。在这种情况下,也可以选择UTF-8。
对于UTF-8与ISO-8859-x,您可以尝试将输入解析为UTF-8,如果解析失败则回退到ISO-8859,但这就是它。实际上没有办法检测哪个 ISO-8859变体。我建议看一下Firefox尝试自动检测的方式,但它不是万无一失的,可能取决于知道输入是HTML。
答案 2 :(得分:1)
通常,除了文本中有一些表示编码的特殊标记外,不可能检测到字符编码。您可以尝试使用字典检测编码,该字典包含仅在某些编码中出现的字符的单词。
这当然只能是一种启发式方法,您需要扫描整个文本。
示例:“英文文本可以用多种编码书写”。例如,可以使用德语代码页来编写该句子。除非你添加一些ASCII中不存在的特殊字符(如ä),否则它与大多数“西方”编码(包括UTF-8)无法区分。