Solution for garbled characters on GNU Screen
GNU Screenを起動すると日本語などが文字化けするようになってしまった。この原因と解決策を記す。
初めはxtermの文字エンコーディングが原因かと思ったが,よく調べていくと違った。GNU Screenの起動中だけ文字化けしていた。そこで,GNU Screenの文字エンコーディング関係のマニュアルを確認してみた。GNU Screenのencコマンドの説明が参考になった。
ここを参照する限り,GNU Screenは起動時のロケールを端末のロケールとして設定するようだ。
そして,GNU Screenの現在の文字エンコーディングは以下のコマンドで確認できる。
screen -Q info
実際にLANG環境変数を指定してGNU Screenを起動して,文字エンコーディングを確認すると,以下のとおりになった。
LANG= screen
screen -Q info
(1,4)/(80,41)+1024 -(+)flow G0[BBBB] 0(bash)
LANG=ja_JP-UTF-8 screen
screen -Q info
(1,4)/(80,41)+1024 -(+)flow UTF-8 0(bash)
後ろから2番目のフィールドがGNU Screenの文字エンコーディングを表している。LANG環境変数の設定をなしにすると,G0 (=ASCII)に設定されてしまっている。
問題の起きたマシンでは,LANG環境変数がどこにも設定されておらず,既定のLANG=C
が適用されてしまっていたようだ。.bashrc
などで以下のようにLANG環境変数を設定することで解決した。
export LANG=ja_JP.UTF-8
なお,同種のソフトであるtmuxでもLANG環境変数によって文字化けが発生するか確認したが,問題なかった。tmuxでは起動時のLANG環境変数には依存しないようだ。