回答:
おそらく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!
ISO-8858文字エンコードは、Linuxシステムでは少し時代遅れです。Linuxシステム全体がUTF-8を使用している可能性があります。端末エミュレーターとシェルを含めます。
しかしながら。cat
、grep
および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
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