私はしかし、非常に次の試験Geditの2.Linuxに保存されているテキストファイルの文字エンコーディングはどこですか?
試験1にまで追加しない何かがあると、私は文字列のみを含む新しいファイルを作成し、短い答えは「どこにも」あってはならない知っています"aàbï"では、 "名前を付けて保存"を選択し、文字エンコーディングを選択するセレクタがあります。だから私はそれを "Unicode(UTF-8)"として保存し、同じことを繰り返し、別のファイルに "ISO-8859-15"として保存します。最初のファイルのサイズは7バイトです(2バイトの文字2個、2バイトの文字2個、ファイルの最後にLFがあり、16進数のダンプが表示されます)。 2番目のファイルのサイズは5バイトです(ラテンエンコーディングの4バイト文字+ LF)。これは、エンコーディングがファイル内のどこにも格納されていないことを示しています。明らかに、私がGeditでファイルを開き、正しくデコードすると、内容を分析してデコードする方法を理解していなければなりません。
試験2。私は上記と同じですが、今度はファイルの内容がちょうど "abcd"、つまり4つのASCII文字です。保存された2つのファイルは同じサイズ(5バイト)で、の同じ16進ダンプです。 2つのファイルが同一で区別できないように思われるので、エンコーディングに関する情報はファイルには含まれていないようです。
しかし、テスト2の2つのファイルを再びGeditで開き、[名前を付けて保存]に移動すると、ファイルが保存されたエンコーディングが選択されます。 Geditは、あるファイルがUTF-8とISO-8859-15でエンコードされていることを何とか知ることができますが、両方とも同じバイト列になるascii文字しか含まれておらず、同じであるように見えます。それはどうですか?
ファイルシステムにはある種のメタデータがありますか?それとも、Geditは独自のキャッシュを持ち、同じコンピュータ上ですでに開いている(そして保存した)ファイルに対してユーザーの選択肢を記憶しているだけですか?
P.S.この質問は、非プログラミングテストケースを提出したとしても、プログラミングに関連するであることに注意してください。これは、特定のタイプのファイルがどのようにコード化され、どのように読み込み、解析、デコード、エンコード、プログラム。
ことも有数欠場時々、揮発性と独自の情報になるので、おそらくそのエディタは、ファイル名でエンコーディングをキャッシュします。プレーンテキストファイルの文字エンコーディングはどこにも格納されていません。実際には、2番目の例の2つのファイルは実際には異なるエンコーディングを持っていません。それらは、7ビット文字の2つの4文字シーケンスを含むだけです。このような文字列はほとんどのエンコーディングで有効です。 – arkascha
将来の読者のために、私はバイトオーダーマーカーu + FEFFで始まったUTF-8ファイルを見てきました。そして、その内容がUnicodeのバリエーションであるというヒントとして使用されたソフトウェア。 –