From: "U.Nakamura" Date: 2008-10-20T17:42:36+09:00 Subject: [ruby-dev:36800] Re: ConverterNotFoundError while making Ruby in Windows(trunk) こんにちは、なかむら(う)です。 In message "[ruby-dev:36797] Re: ConverterNotFoundError while making Ruby in Windows(trunk)" on Oct.20,2008 15:03:54, 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