ablog

不器用で落着きのない技術者のメモ

less で日本語のファイルを開くと文字化けする

Solaris 10 で less で日本語のファイルを開くと文字化けした。

% perl -le 'print "あああ" for 1..100' > hoge.txt
% wc -l hoge.txt
     100 hoge.txt
% less hoge.txt
"hoge.txt" may be a binary file.  See it anyway?
<A4><A2><A4><A2><A4><A2>
<A4><A2><A4><A2><A4><A2>
<A4><A2><A4><A2><A4><A2>
<A4><A2><A4><A2><A4><A2>
<A4><A2><A4><A2><A4><A2>
<A4><A2><A4><A2><A4><A2>
<A4><A2><A4><A2><A4><A2>
<A4><A2><A4><A2><A4><A2>
<A4><A2><A4><A2><A4><A2>
...
% cat hoge.txt
あああ
...
あああ

とこんな具合。

「文字セット」とは、簡潔にいうと、どの文字がノーマル文字・制御文字・バイナリ 文字とされるか、ということである。 環境変数 JLESSCHARSET と LESSCHARSET が文字セットを選択するのに使われる。 less のプログラム中で、この 2 つの環境変数に違いはないが、 環境変数 JLESSCHARSET を使うことを勧める。 なぜなら、環境変数 LESSCHARSET に拡張文字セットを設定していると、 拡張文字セットの使えない less がエラーを起こすからである。 この環境変数に設定できる値を以下に示す。

...

JLESSCHARSET にのみ設定可能な値を以下に示す。

...

euc
ujis と同じ。
sjis
文字が 32 から 127 の値を持つ場合、ASCII 文字列を仮定する。 文字が 128 から 252 の値を持つ場合、
JISX 0208 文字セットと JISX 0201 文字セットの右半分を仮定する。 それ以外の文字はバイナリとして扱われる。
japanese
入力は全ての日本語文字セット、jis, ujis, sjis を仮定する。 less は jis のみを出力する。

...

http://www.linux.or.jp/JM/html/GNU_less/man1/less.1.html

ふむふむ。
環境変数をセットして、

% export LANG=ja_JP.eucJP
% export JLESSCHARSET=japanese
% less hoge.txt
invalid charset name

だめだ。

lv は入っていないし、jless とか勝手にインストールできる環境じゃないし。
どうしようかと思ってたけど、

% more hoge.txt
あああ
あああ
...

more は文字化けしないじゃん。
more でも「b」で逆スクロールできるからとりあえず more 使うことにした。