作者: Bruce.
日時: 2004/12/10(23:16)
Bruce. です。

> 何気なしにcygwin1.dllでexportしている関数を眺めていると、mbrlenとmbrtowcが
> exportされていることを発見。これらの関数はgawkなどでのルチバイト対応で使わ
> れている関数。おお、なんだそうなのかとチェックプログラムを書いて試してみる
> と、どうも「なんちゃって実装」のようだ。まあまじめに実装するとデータベース
> がでかいしねえ・・・

ソースを調べてみました。思ったよりはまともな実装なようです。チェックプログラム
がうまくいかなかったのは、setlocaleするときのlocaleの設定文字列が間違っていた
ためでした。

ja_JP_eucJPのような形式ではなく、

C-EUCJP
C-SJIS
C-UTF-8
C-JIS
C-ISO-8859-1

のような文字列で指定するのでした。ただ、プログラム上でsetlocale(LC_ALL,"")と
したときの動作がLinuxのそれとは異なるため、mb*関数群が使えたとしてもそのまま
ではプログラムはマルチバイト文字対応にはなりません(この辺の状況はVC++を使った
ときと同じ)。

locale.tex
This is a minimal implementation, supporting only the required @code{"C"}
value for locale; strings representing other locales are not
honored.  (@code{""} is also accepted; it represents the default locale
for an implementation, here equivalent to @code{"C"}.

この辺の事情は以下に少し書かれています。

http://www.okisoft.co.jp/esc/cygwin-5.html
5.3 多バイト文字関数と locale についての制限

この辺をいじったとして、マルチバイト文字対応のものが問題なくビルドできるか
どうかまでは時間がなかったので調べてません。

-- 
木村浩一
  I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
  mail kbk@...
  web  www.kt.rim.or.jp/~kbk/
       homepage3.nifty.com/farstar/