コマンドなしでプレーンテキストファイルをASCIIからUnicodeに変換する

コマンドなしでプレーンテキストファイルをASCIIからUnicodeに変換する

ASCII でエンコードされたファイルが UTF-8 に拡張されたり、逆に ASCII に縮小されたりするのはなぜですか?

user:~$ echo 'A  B  C  |  }  ~' > ./file 
user:~$ 
user:~$ file --brief --mime ./file
text/plain; charset=us-ascii
user:~$ 
user:~$ 
user:~$ echo 'ᴁ  ♫  ⼌  

答え1

「エンコーディング」と「文字セット」を混同していると思います。

最初のケースでは、ファイルには US-ASCII の文字のみが含まれます。つまり、表示に使用している言語設定に関係なく、ファイルは同じように表示されます。

2 番目のケースでは、ファイルに UTF8 文字セットに属する文字が含まれるようになります。これは、その文字がファイルに入力されたためです。

ここでは変換は行われません。コマンドは単にファイルの内容が何であるかを通知するだけです。

答え2

このfileコマンドは、分析するファイルに何が含まれているかを推測するだけです。ファイルのヘッダーから一定量のバイトを読み取って分析を行いますが、複数のステップで処理されることもあります (先頭に明確なマーカーが見つかった場合)。非構造化テキスト ファイルでは、拡張された文字数よりも多くの文字が読み取られる./fileため、すべての文字が分析されます。

2 番目の例では、ファイルにいくつかの UTF-8 文字を配置し、それに基づいて文字セットfileを使用してこのファイルを終了しますutf-8。たとえば、ASCII 文字のみを含む 900Kb のファイルがあり、'utf-8' エコー行を追加した場合、fileUTF-8 でエンコードされた文字まで読み込まれていないため、ASCII でエンコードされたファイルとして報告されます。

閾値は100Kb付近にある

関連情報