@kyanny's blog

流行はつねに前進していく。そして、精神の偽りの自由が絶えずせり上がっていく - ロマン・ロラン

日本語 man ページの文字化け対策

man emerge やら man man やらすると、

<standard input>:213: warning: can't find special character `u70B07564'

みたいなエラーメッセージが大量に流れて(行数と文字はいろいろ)そのあと文字化けした man が表示される、という現象にずいぶん前から悩まされていて、でも一部の man でしかならないし放置っていたのですが、今日「どうにかしよう」と思い立って調べてみました。

このあたりを見つけて、どこをいじればいいのかわかったのでまずは書いてある通りにしてみました。自分のシステムは LANG=ja_JP.UTF-8 な環境です。

/etc/env.d/00basic というファイルでいくつかの環境変数が定義されているのでその PAGER を lv にし、 env-update 後に /etc/profile を再読み込み。 /etc/man.conf というファイルに man の設定がかいてあるので JNROFF という環境変数?に LANG と LC_ALL を定義してやります。これで、エラーメッセージが流れなくなり、日本語も文字化けせずに読めるようになりました。

ただ、これでもまだ不満がありました。 man ページをみたときの、文字の装飾部分がまだ化けていました。太字にしたりとかそのへんです。で、どうしたものかと考えて、 man -P "cat | nkf -w" なんてしてみたところ見事に文字化けせずに表示されてることがわかりました。これをさらに lv に通すと文字化けしてしまいますが、 less なら化けない。なので、 ~/.bashrc に alias man="man -P \"cat | nkf -w | /usr/bin/less\"" と書いてやって . ~/.bashrc で綺麗な man ページを取り戻しました。

まとめると、 LANG=ja_JP.UTF-8 な環境で化けない日本語 man を表示するには、

$ sudo vi /etc/env.d/00basic
  PAGER=/usr/bin/lv
$ sudo env-update && source /etc/profile
$ sudo vi /etc/man.conf
  JNROFF LANG=ja_JP.eucJP LC_ALL=ja_JP.eucJP /usr/bin/groff -Tnippon -mandocj
$ vi ~/.bashrc
  alias man="man -P \"cat | nkf -w | /usr/bin/less\""
$ source ~/.bashrc

で ok.