2011-10-20 96 views
2

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

+1

没有ASCII,只有UTF-8 :-) – paxdiablo

回答

5

ICU确实character set detection。您必须注意,正如ICU文档所述:

这最多是一个使用统计和 启发式的不精确操作。正因为如此,如果您提供至少几百字节的字符数据(主要是单一的 语言),则检测效果最佳。

+0

很好 - 我不知道。但正如我所说,它一定是一种启发式。 +1 –

2

如果输入只是ASCII,那么就没有办法检测流中是否存在任何高位集字节,应该怎么研究。也可以在这种情况下选择UTF-8。

至于UTF-8与ISO-8859-x,你可以尝试解析输入为UTF-8,如果解析失败,可以回退到ISO-8859,但就是这样。有没有真正的方法来检测哪个 ISO-8859变种在那里。我建议看看Firefox试图自动检测的方式,但这不是万无一失的,可能取决于知道输入是HTML。

1

一般情况下,除非文本中有一些表示编码的特殊标记,否则不可能检测到字符编码。您可以启发式地检测使用字典的编码,该字典包含仅在某些编码中存在的字符。

这当然只能是启发式的,你需要扫描整个文本。

示例:“英文文本可以用多种编码书写”。这句话可以写成例如使用德语代码页。除非添加一些ASCII中不存在的特殊字符(如ä),否则它与大多数“西方”编码(包括UTF-8)无法区分。