web-dev-qa-db-ja.com

テキストファイルは、後でデコードするためにエンコード方法を保存しますか?

  1. 一部のテキストファイルは、後でデコードするために、テキストコンテンツに沿ってエンコード方法を保存するのではないかと思いました。
  2. または、特定のテキストファイルのエンコード方法を推測するのはテキストビューアの仕事であり、推測が常に正しいとは限りません。はいの場合、テキストビューアはどのようにそれを推測しますか?
19
Tim

一部のテキストファイルは、後でデコードするために、テキストコンテンツに沿ってエンコード方法を保存するのではないかと思いました。

Mark Szymanskiの答えは正しいです-プレーンテキストファイルには明示的なエンコーディング情報はありません-それは「プレーンテキストファイル」の定義です。「プレーン」は、ファイルにメタデータがないという事実を指します。

ただし、一部のアプリケーションでは、UTF-16またはUTF-32/UCS-4としてエンコードされたテキストファイルに バイトオーダーマーク (BOM)が配置されます。 BOMは実際にはエンコーディングを示すことを意図していません(名前が示すようにバイト順序を示します)が、多くのアプリケーションはBOMの存在を使用してUTF-16/UTF-32を認識するため、エンコーディングインジケータとして機能します。

または、特定のテキストファイルのエンコード方法を推測するのはテキストビューアの仕事であり、推測が常に正しいとは限りません。はいの場合、テキストビューアはどのようにそれを推測しますか?

はい、テキストビューアは推測することしかできません。通常、いくつかのヒューリスティックを使用します。

  • 一部のエンコーディング(特にUTF-8)では、すべてのバイトシーケンスが有効であるとは限りません。したがって、アプリケーションはファイルをUTF-8としてデコードしようとするだけです。成功した場合、ファイルはおそらくUTF-8です。無効なバイトシーケンスを見つけて失敗した場合、そうではありません。これはどのように例えばvimはデフォルトで機能します:ファイルを読み取るときに最初にUTF-8を使用しようとします。それが失敗した場合は、ISO-8859-1にフォールバックします。
  • ほとんどの古い8ビットエンコーディングでは、任意のバイトシーケンスが有効です。その場合、バイトヒストグラム(異なるバイト/バイトシーケンスの頻度)を見て、エンコーディングを推測できる場合があります。 Internet Explorerは、ページのエンコーディングを「推測」するためにこれを行っていました。ただし、これは非常にエラーが発生しやすいため、これを実行するプログラムはほとんどありません。

ほとんどの場合、プログラムはテキストファイルのエンコーディングが何であるかを明示的に通知する必要があります。そうしないと、プログラムは正しく読み取ることができません。

19
sleske

プレーンテキストファイルには、エンコーディングに関する情報は保存されません。ビューアは、設定した文字エンコードに基づいてそれを決定します。それはコンピュータにとってすべて同じであるため、それ自体でそれを決定することはできません。

4
Wuffers