more、cat、lessでサポートされている文字エンコーディング

more、cat、lessでサポートされている文字エンコーディング

次のようにエンコードされたテキストファイルがありますfile

CRLF行終端を持つISO-8859テキスト

ファイルにはアクセント付きのフランス語のテキストが含まれています。私のシェルはアクセントを表示でき、emacsコンソールモードで正しく表示されます。

私の問題は、ツールがファイルを正しく表示できないことmoreです。私はこれがツールがこの文字エンコーディングセットをサポートしていないことを意味すると思います。これは本当ですか?このツールはどの文字エンコーディングをサポートしますか?catless

答え1

シェルはおそらくUTF-8を使用しているため、アクセントなどを表示できます。問題のファイルが別のエンコーディングになっており、less moreUTFcatで読み取ろうとすると失敗します。次のコマンドを使用して、現在のエンコーディングを確認できます。

echo $LANG

2つのオプションがあります。デフォルトのエンコーディングを変更したり、ファイルをUTF-8に変更したりできます。エンコードを変更するには、端末を開き、次のように入力します。

export LANG="fr_FR.ISO-8859"

たとえば、

$ echo $LANG 
en_US.UTF-8
$ cat foo.txt 
J'ai mal � la t�te, c'est chiant!
$ export LANG="fr_FR.ISO-8859"
$ xterm <-- open a new terminal 
$ cat foo.txt 
J'ai mal à la tête, c'est chiant!

あるいは、同様のものを使用する場合は、gnome-terminalエンコードを有効にする必要があります。たとえば、terminator右クリックして次のようにします。

ここに画像の説明を入力してください。

のためgnome-terminal

ここに画像の説明を入力してください。

他の(より良い)オプションは、ファイルのエンコーディングを変更することです。

$ cat foo.txt 
J'ai mal � la t�te, c'est chiant!
$ iconv -f ISO-8859-1 -t UTF-8  foo.txt > bar.txt
$ cat bar.txt 
J'ai mal à la tête, c'est chiant!

答え2

ISO-8858文字エンコーディングはLinuxシステムではやや古いです。 Linuxシステム全体がUTF-8を使用している可能性があります。端末エミュレータとシェルを含みます。

しかし。cat、エンコーディング変換を実行しないと、grepISO less-8859 / latin1ファイルはUTF-8として扱われるため機能しません。

emacsがそれを表示できる場合、これは使用されたエンコーディングを自動的に検出しようとしたことで成功したためです。 emacsにファイルをUTF-8として保存するように指示すると、cat//そのファイル内のすべてを使用できますgrep

正確な文字エンコーディングを知っている場合(ISO-8859はそれらのコレクションであり、正確なエンコーディングを知る必要があります:ISO-8859-1またはISO-8859-15以下)、コマンドラインからファイルを変換することもできます。

iconv --from-code ISO-8859-15 your_file -o your_file_as_utf8

答え3

Cat、More、Lessは単にファイルを表示することを行います。コード間変換はジョブ記述の一部ではありません。 CRLFは通常の行末LFのように表示されるため、改行文字エンコーディングは問題になりません。ただし、端末には現在、事実上の標準であるUTF-8エンコーディングテキストが必要な場合があります。

ルイットサポートされているエンコーディングとUTF-8の間で変換します。LC_CTYPE環境変数を設定するか、オプションを使用して翻訳するエンコードをLuitに通知できます-encoding。たとえば、latin-1(ISO 8859-1とも呼ばれます)ファイルを表示するには、次の手順を実行します。

LC_CTYPE=en_US luit less somefile
luit -encoding ISO8859-1 less somefile

ファイルがLuitがサポートしていない外部エンコーディングになっている場合は、トランスレータを介して転送できます。さまざまなエンコーディングをサポートしています。

iconv -f latin1 somefile
iconv -f latin1 somefile | less

関連情報