概要: Cygwin の nl_langinfo を UTF-8 にやっつけで対応させる
VMware とか coLinux とかを使ってみてもどうも定着しなくて、Windows と UNIX like system をシームレスに扱いたい! ということで、最近というかしばらく前から Cygwin をいじってるんだけど、
- UTF-8 Cygwin.dll に入れ替えて
export LANG=ja_JP.UTF-8
しても、 Subversion とかで日本語がうまく扱えないので、やっつけで対応させる方法を書いてみる。
まず、どうやってnl_langinfo
にたどり着いたかというと、
- Cygwin の Subversion で日本語メッセージが文字化けする(Win 版 Subversion で
APR_ICONV_PATH
を指定してないときみたいになる) - Google で検索する
- [[Cygwin の Subversion で日本語を表示できるようにしてみる http://www.gainabros.com/2007/12/10/4/]] というページを発見する
- 文字化けの原因は Subversion が使ってる APR が原因と判明。
- さらに調べると、APR が使ってる Cygwin の
nl_langinfo
がうまく機能してないのが犯人 - なら nl_langinfo を修正した cygwin を作れば問題解決できるんじゃね? <-今ココ
という感じ。
で、これをやっつけで修正する方法は、
- まず、Cygwin のソースを
setup.exe
経由で取得。 - で、僕は UTF-8 版 Cygwin.dll を使ってたので、 [[UTF-8 Cygwin の patch http://www.okisoft.co.jp/esc/cygwin-20.html]] 取ってきて、patch を適用。
- んで、
/usr/src/cygwin-1.5.25-15/newlib/libc/locale/nl_langinfo.c
の 93 行目、ret = "US-ASCII";
となってるところをret = "UTF-8"
に変更。 ./configure && make
- make が終わったら、
./i686-pc-cygwin/winsup/cygwin
のcygwin0.dll
をcygwin1.dll
にリネームして/bin
にインストール - 以上終了。
という感じ。で、上記の方法で、Subversion の文字化けがバッチリ直りました。
あと、他にも APR 使ってるアプリケーションやnl_langinfo
を使ってるアプリケーションでも、
実装にも因るでしょうが、日本語が正しく扱えるようになると思います。
ただ、この方法は環境変数LANG
で UTF-8 を指定していない場合には対応していません。まあやっつけだからね。
というより文字コードの判別で、該当する文字コードがなかった場合にUS-ASCII
返す代わりにUTF-8
を返すようにしているだけなので、
根本的な解決じゃないです。まああのえらい中途半端なnl_langinfo.c
が修正されないことにはなんとも。
あ、あと Cygwin を make するときに、Makefile
でmakeinfo
のパスがうまく見つけられなかったようで、
最初コンパイルしようとしたときは、うまくコンパイルできませんでした。
まあMakefile
の中のmakeinfo
を検索して修正したらあっさり直りましたが。
まあこれで Cygwin の日本語の扱いがマシになったんじゃないかなぁと思います。
他にもzsh
とかls
の日本語の扱いで面倒な事があったんですが、これはまた別の機会に。
というか別の記事で書くと思います。
まあこれで Cygwin の Subversion で日本語がきちんと扱えるようになったので、 また Cygwin 環境構築の続きができそうです。
#FIXME