Cygwinのnl_langinfoをUTF-8にやっつけで対応させる方法

読了まで:約3分


概要: 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に​たどり着いたかと​いうと、

  1. Cygwin の​ Subversion で​日本語メッセージが​文字化けする​(Win 版 Subversion でAPR_ICONV_PATHを​指定してない​ときみたいに​なる​)
  2. Google で​検索する
  3. [[Cygwin の​ Subversion で​日本語を​表示できるように​してみる​ http://www.gainabros.com/2007/12/10/4/]] と​いう​ページを​発見する
  4. 文字化けの​原因は​ Subversion が​使ってる​ APR が​原因と​判明。
  5. さらに​調べると、​APR が​使ってる​ Cygwin のnl_langinfoが​うまく​機能してないのが​犯人
  6. なら​ nl_langinfo を​修正した​ cygwin を​作れば​問題解決できるんじゃね?​ <-今ココ

と​いう​感じ。

で、​これを​やっつけで​修正する​方​法は、

  1. まず、​Cygwin の​ソースをsetup.exe​経由で​取得。
  2. で、​僕は​ UTF-8 版 Cygwin.dll を​使ってたので、​ [[UTF-8 Cygwin の​ patch http://www.okisoft.co.jp/esc/cygwin-20.html]] 取ってきて、​patch を​適用。
  3. んで、/usr/src/cygwin-1.5.25-15/newlib/libc/locale/nl_langinfo.cの​ 93 行目、ret = "US-ASCII";となってる​ところをret = "UTF-8"​に変更。
  4. ./configure && make
  5. make が​終わったら、./i686-pc-cygwin/winsup/cygwincygwin0.dllcygwin1.dllにリネームして/binに​インストール
  6. 以上​終了。

と​いう​感じ。​で、​上記の​方法で、​Subversion の​文字化けが​バッチリ直りました。​ あと、​他にも​ APR ​使ってる​アプリケーションやnl_langinfoを​使ってる​アプリケーションでも、​ 実装にも​因るでしょうが、​日本語が​正しく​扱えるようになると​思います。

ただ、​この​方法は​環境変数LANGで​ UTF-8 を​指定していない​場合には​対応していません。​まあやっつけだからね。​ と​いうより​文字コードの​判別で、​該当する​文字コードが​なかった​場合にUS-ASCII​返す​代わりにUTF-8を​返すように​しているだけなので、​ 根本的な​解決じゃないです。​まああの​えらい​中途半端なnl_langinfo.cが​修正されない​ことには​なんとも。

あ、​あと​ Cygwin を​ make する​ときに、Makefilemakeinfoの​パスが​うまく​見つけられなかったようで、​ 最初コンパイルしようとした​ときは、​うまく​コンパイルできませんでした。​ まあMakefileの​中のmakeinfoを​検索して​修正したら​あっさり​直りましたが。

まあ​これで​ Cygwin の​日本語の​扱いが​マシに​なったんじゃないかなぁと​思います。​ 他にもzshとかlsの​日本語の​扱いで​面倒な事が​あったんですが、​これは​また別の​機会に。​ と​いうか別の​記事で​書くと​思います。

まあ​これで​ Cygwin の​ Subversion で​日本語が​きちんと​扱えるようになったので、​ また​ Cygwin 環境構築の​続きが​できそうです。

#FIXME

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。
次に備えて待機中。

今は趣味でプログラミングをして
生活しています。