more、cat、lessでサポートされる文字エンコード


18

私は次のようにエンコードされたテキストファイルを持っていますfile

ISO-8859テキスト、CRLF行終端記号付き

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

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

回答:


17

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

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!

4

ISO-8858文字エンコードは、Linuxシステムでは少し時代遅れです。Linuxシステム全体がUTF-8を使用している可能性があります。端末エミュレーターとシェルを含めます。

しかしながら。catgrepおよびless任意のエンコーディング変換をしない、彼らはどれが動作しません、UTF-8としてあなたのISO-8859 / latin1のファイルを扱います。

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

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

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

2

Cat、More、およびLessは、ファイルを表示するだけの仕事をしています。エンコーディング間の変換は、ジョブの説明には含まれていません。CRLFはLFで終わる通常の行と同じように表示されるため、改行のエンコードは問題になりませんが、端末はおそらく、UTF-8エンコードされたテキストを期待しています。これは現在の事実上の標準です。

Luitは、サポートされているエンコードとUTF-8を変換します。LC_CTYPE環境変数を設定するか、-encodingオプションを使用して、変換するエンコードをLuitに指示します。たとえば、latin-1(別名ISO 8859-1)ファイルを表示するには:

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

ファイルがLuitでサポートされていないエキゾチックなエンコーディングである場合、翻訳プログラムを介してパイプできます。Iconvは多くのエンコーディングをサポートしています。

iconv -f latin1 somefile
iconv -f latin1 somefile | less
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.