さまざまな文字エンコードの問題は、含まれているファイルが常に明確にマークされているとは限らないことです。「byte-order-markers」またはBOMを使用して一部をマークするための一貫性のない規則があります。しかし、本質的には、ファイルを正確に読み取るために、ファイルのエンコーディングが何であるか を知らされなければなりません。
私たちはソースファイルを読み取るプログラミングツールを構築しますが、これは私たちに悲しみを与えます。デフォルトを指定したり、BOMなどをスニッフィングしたりする手段があります。また、規則やデフォルトをうまく処理できます。しかし、私たち(そして私は他のすべての人)がハングアップする場所は、BOMマークが付いていないUTF-8ファイルです。
最近のMSIDE(VS Studio 2010など)は、ファイルを「スニッフィング」して、BOMなしでUTF-8でエンコードされているかどうかを判断するようです。(ツールビジネスに携わっている私たちは、MSが「愚かな」崖を越えなければならない場合でも、市場シェアがあるため、MSと互換性を持たせたいと考えています。)ヒューリスティック(ヒューリスティックの議論は問題ありませんが)?どうして「正しい」のでしょうか?(このように解釈されたISO8859-xエンコード文字列を検討してください)。
編集:文字エンコード/セットの検出に関するこの論文は非常に興味深いものです: http ://www-archive.mozilla.org/projects/intl/UniversalCharsetDetection.html
2012年12月の編集:ファイル全体のスキャンを終了して、UTF-8シーケンスの違反が含まれているかどうかを確認しました...含まれていない場合は、UTF-8と呼びます。このソリューションの悪い部分は、UTF-8の場合、文字を2回処理する必要があることです。(UTF-8でない場合、ファイルがすべての7ビットASCIIで発生し、その時点でUTF-8のように読み取っても問題がない場合を除いて、このテストでかなり迅速に判断できる可能性があります)。