Cygwinを使い始めて3日がたちました。そろそろなれてきました。
Cygwinで文字けさせてみた
ターミナル | 表示文字コード | $LANG |
mintty+bash | sjis | utf8 |
cmd.exe+bash | sjis | utf-8 |
cmd.exeでbash起動してて、ls したらSJISのようです。LANG無視されてます。
mintty でBas起動してて、 ls したらutf-8のようです。LANG効いてます。
今度はLANGをSJISにそろえました
ターミナル | 表示文字コード | $LANG |
mintty+bash | sjis | sjis |
cmd.exe+bash | sjis | sjis |
こんどはcmd.exeが化けます。
さらにLANG=C にしてみたり。
ターミナル | 表示文字コード | $LANG |
mintty+bash | sjis | - |
cmd.exe+bash | sjis | - |
「?」に化けました。
cygwin がコマンド結果をutf-8で持ってて、LANGに合わせてに変換してるって事だよね。そしてcmd.exeだけはシステムの値を使って特別扱いしてるとしか思えない。
たぶん、ls.exeだけをcmd.exeから単品起動しても大丈夫なように、つまりBashなしで呼び出してもうまく動作するようにcygwinのDLLが結果をsjisに変換するようにできてるんだと思う。
ちなみに、Windowsの環境変数にLANGを入れてないので、Cmd.exeに出るときは素通しだと思ってた。
とりあえず、export LANG=ja_JP.UTF-8やsjisしてれば化けないみたい。理由はわからないけど適当でちゃんと動くあたり枯れてるってことかも