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で日本語を表示できるようにしてみるというページを発見する
- 文字化けの原因はSubversionが使ってるAPRが原因と判明。
- さらに調べると、APRが使ってるCygwinの
nl_langinfoがうまく機能してないのが犯人 - ならnl_langinfoを修正したcygwinを作れば問題解決できるんじゃね? <-今ココ
という感じ。
で、これをやっつけで修正する方法は、
- まず、Cygwinのソースを
setup.exe経由で取得。 - で、僕はUTF-8版Cygwin.dllを使ってたので、UTF-8 Cygwinのpatch取ってきて、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環境構築の続きができそうです。