web-dev-qa-db-ja.com

ファイルのエンコーディングを検出する方法は?

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

Notepad ++ で開くと、[エンコーディング]メニューで、「UCS-2リトルエンディアン」のエンコーディングと「BOMなしのUTF-8」のエンコーディングがあると報告されています。

ここの違いは何ですか?これらはすべて完全に有効なスクリプトのようです。 Notepad ++なしでファイルのエンコーディングを確認するにはどうすればよいですか?

127
Marcel

ファイルは通常、ファイルヘッダーでエンコードを示します。多くの例 here があります。ただし、ヘッダーを読み取っても、ファイルが実際に使用しているエンコーディングを確認することはできません

たとえば、最初の3バイトが0xEF,0xBB,0xBFのファイルはおそらくUTF-8でエンコードされたファイルです。ただし、文字で始まるISO-8859-1ファイルの場合があります。または、完全に異なるファイルタイプである可能性があります。

Notepad ++は、ファイルが使用しているエンコーディングを推測するために最善を尽くし、ほとんどの場合、それを正しく処理します。しかし、時々それはそれを誤解します-それがその「エンコーディング」メニューがそこにある理由です、それであなたはその最良の推測を上書きすることができます。

あなたが言及する2つのエンコーディングについて:

  • 「UCS-2リトルエンディアン」ファイルはUTF-16ファイル(情報から理解した内容に基づいて ここ )なので、おそらく0xFF,0xFEを最初の2バイトとして。 Notepad ++は、UTF-16の特定の側面をサポートしていないため、私が言えることから、それらを「UCS-2」と説明しています。
  • 「BOMなしのUTF-8」ファイルにはヘッダーバイトがありません。それが「BOMなし」ビットの意味です。
107
vaughandroid

それはいけません。それができれば、「ランダムな意味不明」なWebサイトやテキストファイルはそれほど多くありません。そのため、通常、エンコードはペイロードと共にメタデータとして送信されます。

そうでない場合にできることは「スマートな推測」だけですが、同じバイトシーケンスが複数のエンコーディングで有効な場合があるため、結果はしばしばあいまいになります。

19
Marco