ファイルのエンコーディングを検出する方法を教えてください。

私のファイルシステム(Windows 7)には、いくつかのテキストファイルがあります(これらはSQLスクリプトファイルです)。

Notepad++]1で開くと、"Encoding"メニューで、いくつかのテキストファイルのエンコーディングが"UCS-2 Little Endian"と報告され、いくつかのエンコーディングが"BOMなしのUTF-8"と報告されます。

いったい何が違うのでしょうか?どれも完全に有効なスクリプトのように見えます。Notepad++を使わずにファイルのエンコーディングを知るにはどうすればよいのでしょうか?

ソリューション

ファイルのエンコーディングは、一般的にファイルヘッダで示されます。多くの例があります ここ。しかし、ヘッダーを読んでも、そのファイルが実際にどのようなエンコーディングを使用しているのかはわかりません。

例えば、最初の3バイトが 0xEF,0xBB,0xBF であるファイルは、おそらく *UTF-8 でエンコードされたファイルです。しかし、それは ISO-8859-1 ファイルで、たまたま文字  で始まっているかもしれません。あるいは、まったく別のファイルタイプかもしれません。

Notepad++ は、ファイルがどのようなエンコーディングを使用しているかを推測するために最善を尽くし、ほとんどの場合、それを正しく理解します。そのために 'Encoding'メニューがあり、推測を無効にすることができるのです。

ご指摘の2つのエンコーディングについては

  • UCS-2 Little Endian"のファイルはUTF-16のファイルなので(こちらの情報から私が理解したところでは)、おそらく*最初の2バイトは0xFF,0xFEで始まります。私の知る限りでは、Notepad++はUTF-16のある側面をサポートしていないので、それらを"UCS-2"と記述しています。
  • UTF-8 without BOM" のファイルにはヘッダバイトがありません。これがBOMなしという意味です。
解説 (10)

できません。もしそれができたら、「ランダムな失言」が書かれたWebサイトやテキストファイルがこんなにたくさん出回ることはないでしょう。だからこそ、エンコーディングは通常、メタデータとしてペイロードと一緒に送られるのです。

そうでない場合は、「賢い推測」をするしかありませんが、同じバイトシーケンスが複数のエンコーディングで有効である可能性があるため、結果はしばしば曖昧になります。

解説 (4)