2015年10月20日火曜日

minttyでpingを使うと文字が化けてしまう

先日、
minttyでのショートカット
http://www.sakashita-net.jp/2015/10/mintty.html
で書いたように、WindowsでUnixのシェル環境を使うために、以下を参考にGit for Windowsをインストールして使っています。 
msysgit で日本語を使いたい
http://qiita.com/kumazo@github/items/2169e1ee7be278f82b94
今度はpingなどのWindowsのコマンドを実行すると、その出力文字列が化けてしまうことに気が付きました。Windowsのコマンドの文字列はShift JIS、minttyが扱う文字コードはUTF-8であるためです。
設定ではうまくできないようで、pingにaliasを設定する必要があるようです。
以下のページを参考にして設定することで、最低限のことはできるようになりました。
gnupackでCygwin導入した時に最初にすること
http://proger.blog10.fc2.com/blog-entry-119.html
利用したのは以下の設定です。
minttyの設定をUTF-8に変更して困るのは、Windowsコマンド(ipconfig等)の出力の文字化けです。標準Cygwin環境もデフォ ルト文字コードがUTF-8なので同じことになります。対策として標準出力をUTF-8に変換するラッパーを通すようにします。
文字コード変換にはiconvを使えばいいのですが、gnupackのデフォルトでは入っていないので、予めapt-cygでlibiconvをinstallしておきます。その上で、.bashrcに以下のようなaliasを設定すればOKです。
(~/.bashrc)










function wincmd() {
    CMD=$1
    shift
    $CMD $* 2>&1 | iconv -f cp932 -t utf-8
}
alias ipconfig='wincmd ipconfig'
alias netstat='wincmd netstat'
alias netsh='wincmd netsh'
alias cscript='wincmd cscript'
他に、必要な物があれば同じような感じで追加すればOKです。
Git for Windowsではiconvは含まれていたので、追加のインストールは不要でした。