Ubuntuの文字化け対策
前の投稿の続きです.Ubuntuをテキストログインしたのは良いですが,Helpを出したりDATEコマンドを打ってみたりした時に文字化けして,おそらく日本語の部分が□で置きかわるという非常に恐怖を煽る画面になりました.怖かったです.あれこれ調べて対策を取りました.
結局,やるべきことはロケートの環境変数LANGを日本語(ja_JP.utf-8)にしておくだけなのですが...
日本語でUbuntuを導入したため最初からこの設定は問題ありませんでした.
実際,ターミナルエミュレータを使って操作すると日本語はちゃんと出力されて何も問題ないのですが...テキストログインしてコンソールから利用するとうまくいかない.どうしたものかと思って色々調べて見た.
どうもデフォルトのままではテキストログインした時の操作画面,すなわち環境変数TERMがLinuxになっている時には,特別なことをしないと日本語は表示できないっぽい.特別なことというのはコンソールからfbtermとかいう日本語対応のターミナルエミュレータを起動するというもの.正直そこまでして日本語がいいわけでもないしこの方法はあんまり推奨されていないようなので,これは使わない.
そこで最終的にたどり着いたのは標準コンソールにいる時は設定言語を英語にして,それ以外の時は日本語にするというシェルスクリプトを書いてしまおうというものです.
書き込むのはおなじみの~/.bashrcです.vimを使って書きます.
$ sudo vi ~/.bashrc
で,最後に以下を付け加えます.
linux) LANG=C
LANGUAGE=en
LC_ALL=C;;
*)
esac
以上はただのcase文なので詳しい文法はhttp://shellscript.sunone.me/case.htmlなどに詳しく載っていたのでそちらを参照.
また,上のスクリプトの意味は,
case $TERM in ... esac で環境変数TERMに関しての場合分けをします.
linux) LANG=C
LANGUAGE=en
LC_ALL=C;;
の部分で標準コンソールにいる時に行う処理を書きます.LANG=Cは文字を英語で表示する処理.LANGEAGE=enはubuntuからの文字の出力を英語にする(厳密ではないかもしれない).LC_ALL=Cは時刻とか,その他もろもろを英語にする処理です.
また,例外処理
*)
の部分は何も書かなくても日本語でインストールしているのでいじらなくて良いです.
書きたかったら上と同様にして日本語の設定をかけばいいが,そこは必要最低限でにしておきます.
これを書き終えたら:wqで保存してvimを終了します.そして
$ sudo source ~/.bashrc
で変更を適用します.
するとうまくいきました.標準コンソールではちゃんと英語が使え,sshでmacとかから遠隔操作した場合はターミナルから日本語設定のものが使えるようになりました.まあ,別に日本語いらないような気もしてきたんだけど,せっかく入ってたからね...
ちなみに,情けない話ですがLANGUAGE=enの設定にすぐに気づけませんでした.LANG=Cの段階でコマンドのヘルプとかは英語になったので,「このコマンドは見つかりませんでした」的な表示のみ文字化けする理由がなかなか分からなかったんですよね.でも,□が出てこなくなっていたのでエンコードには問題ない.根本的にOSが日本語を出力していることに気づき,言語に日本語と英語が共存している
LANGUAGE=ja:en
がいけなかったのだと分かりました.
次回はsshでmacからubuntuを操作した話です.次で自分的には大体ひと段落です.
0 件のコメント:
コメントを投稿