それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Cygwinの文字コード設定が適当で動作してる

Cygwinを使い始めて3日がたちました。そろそろなれてきました。

Cygwinで文字けさせてみた

  • 左 mintty + bash + LANG=ja_JP.utf8
  • 右 cmd.exe +bash + LANG=ja_JP.utf8

ターミナル 表示文字コード $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-8sjisしてれば化けないみたい。理由はわからないけど適当でちゃんと動くあたり枯れてるってことかも