2011-10-20 132 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)無法區分。