次のようにエンコードされたテキストファイルがありますfile
。
CRLF行終端を持つISO-8859テキスト
ファイルにはアクセント付きのフランス語のテキストが含まれています。私のシェルはアクセントを表示でき、emacs
コンソールモードで正しく表示されます。
私の問題は、ツールがファイルを正しく表示できないことmore
です。私はこれがツールがこの文字エンコーディングセットをサポートしていないことを意味すると思います。これは本当ですか?このツールはどの文字エンコーディングをサポートしますか?cat
less
答え1
シェルはおそらくUTF-8を使用しているため、アクセントなどを表示できます。問題のファイルが別のエンコーディングになっており、less
more
UTFcat
で読み取ろうとすると失敗します。次のコマンドを使用して、現在のエンコーディングを確認できます。
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
、エンコーディング変換を実行しないと、grep
ISO 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