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


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

プレーンテキストファイルの場合、エンコードに関する情報は保存されません。ただし、リッチテキストについては言えません。
ワッファー

はい、私は平文について話している。
ティム

回答:


19

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

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

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

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

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

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

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


ではfile -bi、BOMが使用されていない場合、どのように機能しますか?
オールドギーザー14年

@OldGeezer:fileファイルの種類とエンコードを決定するためのさまざまなヒューリスティックがあります。ほとんどの場合、ファイル内の特定の文字列またはバイトシーケンスを探します。より具体的な情報が必要な場合は、おそらくソースを読む必要があります。または、別の質問をしてください:-)。
sleske

@OldGeezer:ところで、fileほとんどのテキストエンコードを確実に検出することはできません(非常に難しいため)。manページには、文字セットの検出に関する情報がいくつかあります- fileほとんどはASCII、UTF-8 / 16、EBCDIC、およびISO-8859-xのみを認識します。たとえば、KOI8-Rでエンコードされたファイルは「ISO-8859-1」として報告されます。
sleske

4

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


そのため、テキストビューアーはテキストファイルのエンコード方法を区別できません。テキストビューアーにオブジェクト/実行可能ファイルが与えられた場合、それがテキストファイルではないことを認識できますか?
ティム

いいえ、できません。テキストファイルのようにそれを開こうとします。そしてもちろん、文字化けしたものがたくさん表示されます。エンコードを区別する唯一の方法は、エンコードを手動で変更する場合です。
ワッファー

@Tim:ほとんどのテキストビューアーは、ヒューリスティックを使用して、何かがテキストファイルかどうかを確認します。ファイルに多くの非印刷文字が含まれている場合、多くの閲覧者と編集者が警告します(たとえばlessgrepUnix / Linuxではこれを行います)。
sleske
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.