こんにちは、なかむら(う)です。

In message "[ruby-dev:36797] Re: ConverterNotFoundError while making Ruby in Windows(trunk)"
    on Oct.20,2008 15:03:54, <usa / garbagecollect.jp> wrote:
> 時間が足りなくていまいち原因が追いきれないのですが、miniruby
> でmkmfをrequireすると$stdout.external_encodingがASCII-8BITに
> 設定されるように見えるのが気になります。

IO#reopenで、バイナリモードのioを引数として渡すと、元のioある
いは引数のioのエンコーディング設定に関わりなく、強制的に
external_encodingがASCII-8BITに設定されるのが原因であるようで
す。

  p $stdout.external_encoding #=> nil
  f = open("aaa", "wb")
  p f.external_encoding       #=> nil
  $stdout.reopen(f)
  p $stdout.external_encoding #=> "ASCII-8BIT"


直し方としては、
  (1) io_reopen()の中でrb_io_binmode()呼び出し直後に
        fptr->encs = orig->encs;
      などとする
というのが思いつきましたが、念のためにrb_io_binmode()を呼び出
しているところを探してみると、ここでエンコーディングが勝手に
変わってしまうことを想定しているとは思えないコードが散見され
ます。
というわけで、
  (2) rb_io_binmode()中でのfptr->encsの設定を削除する
のがいいのではないかと思うのですが、なぜここでencsを設定して
いるのかわからないので消していいのかどうか判断できません。

どうすればいいでしょう?
# というかどうにかしてください ^^;


それでは。
-- 
U.Nakamura <usa / garbagecollect.jp>