nyarn.tech

にゃーん

cocotを使ってssh先でのTerminalの文字化けを解消する

業務などでまれに古いサーバ(CentOS5系とか)にsshすることがあるのですが、
その際にサーバのlocaleと、ローカルのlocaleが一致していないために、マルチバイト文字を表示すると文字化けしてしまいます。

$ df -h
Filesystem          ������  ����  �Ĥ� ����% �ޥ���Ȱ���

ohh...

文字化けを解消するためには、サーバ側のlocaleをローカル(terminal)に合わせるか、
terminalの文字コードをサーバ側のlocaleに合わせる必要があります。

サーバ側のlocaleは気軽に変えられないので、どうしてもterminalの文字コードを変えざるをえません。

そんなときに使えるのがcocotです。

github.com

インストール

OS Xであれば、brewでできます。
brew install cocot
おわり。

使い方

cocot -t <ターミナルの文字コード> -p <ssh先の文字コード> ssh <hostなど...>

文字コードは locale コマンドで調べることができます。

ローカルで実行

locale
LANG="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_CTYPE="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_ALL=

リモートサーバで実行

$ locale
LANG=ja_JP.eucJP
LC_CTYPE="ja_JP.eucJP"
LC_NUMERIC="ja_JP.eucJP"
LC_TIME="ja_JP.eucJP"
LC_COLLATE="ja_JP.eucJP"
LC_MONETARY="ja_JP.eucJP"
LC_MESSAGES="ja_JP.eucJP"
LC_PAPER="ja_JP.eucJP"
LC_NAME="ja_JP.eucJP"
LC_ADDRESS="ja_JP.eucJP"
LC_TELEPHONE="ja_JP.eucJP"
LC_MEASUREMENT="ja_JP.eucJP"
LC_IDENTIFICATION="ja_JP.eucJP"
LC_ALL=

ということで、この場合は
cocot -t UTF-8 -p EUC-JP ssh hostname としてあげることで
文字化けを解消することができます。

$ df -h
Filesystem          サイズ  使用  残り 使用% マウント位置

🎉