检测多字节字符编码

时间:2011-10-20 13:16:11

标签: c++ c character-encoding pattern-matching

用于检测字符数组(char*)的多字节字符编码(UTF-8,UTF-16等)的C / C ++库。奖励还包括检测匹配器何时停止,即检测给定的一组可能编码的前缀匹配范围。

3 个答案:

答案 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)无法区分。