回答:
一部のテキストファイルは、後でデコードするためにテキストコンテンツに沿ってエンコード方法を保存するのではないかと思っていましたか?
Mark Szymanskiの答えは正しいです-プレーンテキストファイルに明示的なエンコード情報はありません-それは「プレーンテキストファイル」の定義です。「プレーン」はファイルにメタデータがないという事実を指します。
ただし、一部のアプリケーションは、UTF-16またはUTF-32 / UCS-4としてエンコードされたテキストファイルにバイトオーダーマーク(BOM)を配置します。BOMは実際にはエンコーディングを示すためのものではありません(名前が示すように、バイト順を示します)が、多くのアプリケーションはUTF-16 / UTF-32を認識するためにBOMの存在を使用するため、エンコーディングインジケータとして機能します。
または、特定のテキストファイルのエンコード方法を推測するのはテキストビューアーの仕事ですか?推測は常に正しいとは限りませんか?はいの場合、テキストビューアはどのように推測しますか?
はい、テキストビューアーは推測しかできません。通常、いくつかのヒューリスティックを使用します。
vim
デフォルトでどのように機能するかです。ファイルを読み込むときに最初にUTF-8を使用しようとします。それが失敗すると、ISO-8859-1にフォールバックします。ほとんどの場合、プログラムはテキストファイルのエンコーディングが何であるかを明示的に通知する必要があります。そうでないと、プログラムは正しく読み取ることができません。
file -bi
、BOMが使用されていない場合、どのように機能しますか?
file
ファイルの種類とエンコードを決定するためのさまざまなヒューリスティックがあります。ほとんどの場合、ファイル内の特定の文字列またはバイトシーケンスを探します。より具体的な情報が必要な場合は、おそらくソースを読む必要があります。または、別の質問をしてください:-)。
file
ほとんどのテキストエンコードを確実に検出することはできません(非常に難しいため)。manページには、文字セットの検出に関する情報がいくつかあります- file
ほとんどはASCII、UTF-8 / 16、EBCDIC、およびISO-8859-xのみを認識します。たとえば、KOI8-Rでエンコードされたファイルは「ISO-8859-1」として報告されます。
プレーンテキストファイルには、エンコードに関する情報は保存されません。ビューアは、設定されている文字エンコーディングに基づいて決定します。それはすべてコンピュータと同じであるため、それ自体では判別できません。
less
、grep
Unix / Linuxではこれを行います)。