私のプログラムは、さまざまなエンコーディングを使用するファイルを読み取る必要があります。それらは、ANSI、UTF-8、またはUTF-16(ビッグエンディアンまたはリトルエンディアン)の場合があります。
BOM(バイト順マーク)があれば問題ありません。ファイルがUTF-8かUTF-16BEかLEかはわかります。
BOMがない場合、ファイルはANSIであると想定したかったのです。しかし、私が扱っているファイルにはBOMがないことがよくあります。したがって、BOMがないということは、ファイルがANSI、UTF-8、UTF-16 BE、またはLEであることを意味する場合があります。
ファイルにBOMがない場合、ファイルの一部をスキャンして、エンコーディングのタイプを最も正確に推測するための最良の方法は何でしょうか。ファイルがANSIの場合は100%近く、UTF形式の場合は90年代後半になりたいです。
これを決定するための一般的なアルゴリズムの方法を探しています。しかし、私は実際にはUnicodeを知っていてTEncodingクラスを持つDelphi 2009を使用しているので、それに固有のものはボーナスになります。
答え:
ShreevatsaRの回答により、Googleで「ユニバーサルエンコーディング検出器デルファイ」を検索しました。この投稿が約45分間生きていた後、この投稿が1位に掲載されたことに驚きました。それは速いグーグルボッティングです!また、Stackoverflowがすぐに1位になるのも驚くべきことです。
Googleの2番目のエントリは、さまざまな言語のアルゴリズムをリストした文字エンコード検出に関するFredEakerのブログエントリでした。
そのページでDelphiについての言及を見つけたので、Delphiで記述されMozillaのi18nコンポーネントに基づいたSourceForgeの無料のオープンソースChsDet文字セット検出器に直接たどり着きました。
素晴らしい!答えてくれたすべての人に感謝します(すべて+1)、ShreevatsaRに感謝し、Stackoverflowにもう一度感謝します。1時間以内に私の答えを見つけるのを手伝ってくれました!